PHPの奇妙なセッションの問題 -- php フィールド と session フィールド 関連 問題

Strange session issue in PHP












2
vote

問題

日本語

PHPのセッションで奇妙な問題を抱えています。基本的に、ユーザが連絡先フォームを送信すると、処理スクリプトはセッションを完了時に設定します(<コード> $_SESSION['action']='sent'; )。その後、ユーザーはフォームから送信されたページに戻り、次のコードを使用してメッセージが表示されます。

<事前> <コード> $action = $_SESSION['action']; if ( $action == 'sent' ) { echo '<p>Thank you for contacting us, we will be in touch with you ASAP.</p>'; unset($_SESSION['action']); }

セッションは設定されていないので、ページを更新するか、ナビゲートしてメッセージを返すと、メッセージが表示されません。

基本的に問題は、セッションが設定されていないとき、メッセージが表示されないようにスクリプトの最初から解除されないようです。 if ステートメントは、セッションが設定されていないため、明らかに実行されていますが、メッセージは表示されていません。

これまでに同じスクリプトを何度も使用していました、そしてそれは他のサイト(同じサーバー上のすべての同じ設定で)で完全に働きます。

任意の助け/アドバイスが理解されるでしょう!

英語

I'm having a strange issue with sessions in PHP. Basically, when a user submits a contact form, the processing script sets a session on completion ( $_SESSION['action']='sent'; ). The user is then sent back to the page they sent the form from and a message is displayed using the following code:

$action = $_SESSION['action'];  if ( $action == 'sent' ) { echo '<p>Thank you for contacting us, we will be in touch with you ASAP.</p>'; unset($_SESSION['action']); } 

The session is unset so if they refresh the page or navigate away and come back the message won't be displaying any more.

Basically the problem is that when the session is unset it seems to unset it from the very beginning of the script so that the message doesn't display. The if statement is obviously running as the session is being unset, but the message isn't displaying.

I've used this exact same script many times before and it works absolutely perfectly on other sites (on the same server, with all the same settings).

Any help/advice would be appreciated!

</div
     
       
       

回答リスト

0
 
vote

セッションを初期化していますか? <コード> YES1 ブラウザに何かを出力する前に?

 

Are you initialized a session? session_start(); before output something in browser?

</div
 
 
 
 
0
 
vote

session_destroy()をやろうとします。設定解除($ _セッション)の代わりに。 セッションを開始した場所と「action」を「送信」に設定した場所を教えてください。

 

Try to do a session_destroy(); instead of unset($_SESSION); Could you give us the part where you start the session and where you set the "action" to "sent"?

</div
 
 
     
     
0
 
vote

こんにちはTomセッションを開始するスクリプトが同じディレクトリにあることを確認しています - 例えば、同じセッションにアクセスするコマンドです。 - 1つの下にある場合はHTTPSの下にある可能性があります。 あるいは、または下/下にある場合は/ dir1、/ dir1が最初に実行されました。セッションによって作成されたクッキーは/ dir1とより深いので、他のスクリプトはそれを読むことができません。セッションは見られませんので、新しいものを始めます。

私はこのセッションのものではないが、それはチェックの価値があるかもしれません。 - お父さん

 

Hi Tom are you making sure the script that start the session is in the same directory - eg are the commands accessing the same session - could be on under one is under https, and one is under http OR if One is under /, another is under /dir1, and /dir1 was run first . The cookie created by the session is for /dir1 and deeper, so the other script can't read it; it sees no session so it starts a new one.

I'm not brill at this sessions stuff but it might be worth a check. - Dad

</div
 
 
 
 
0
 
vote

あなたが持っているコードは正しいです。また、セッションは設定解除中であるため、IFブロック内のステートメントが実行されていることがわかります。出力が実際にエコーによって表示されているが、ブラウザによって示されていないだけではありません(これは、CSSコードが設定されている場合に発生する可能性があります)。そのため、出力ページのソースを確認し、ソースにOUT PUTメッセージが含まれているかどうかを確認してください。

それによって、あなたのエコーにJavaScriptアラートボックスを入れることができ、それがアラートボックスを表示するかどうかを確認することができます。

<コード> echo "<script type='text/javascript'> alert('Hi'); </script>";

これは、隠しCSSコードを上書きする必要があります。

 

The code you have is correct. And since the session is being unset, we know that the statements in the if block are being executed. May be the output is actually being displayed by echo, but is just not shown by the browser (this can happen if your css code is configured so). So, just check the source of the output page and check if the source contains the out put message.

In other way, you can put a javascript alert box in your echo and see if it displays an alert box.

echo "<script type='text/javascript'> alert('Hi'); </script>";

This should override any hiding css code.

</div
 
 
0
 
vote

古いスレッドですが、この状況でisset()を好むように追加します。

<事前> <コード> <?php session_start(); if(isset($_SESSION['sent'])){ echo "Successfully submitted form!"; $_SESSION = array(); session_regenerate_id(); session_unset(); session_destroy(); exit; } if(isset($_POST['submit'])){ //validate input & process form $_SESSION['sent'] = 1; header("location:form.php"); // name of this file exit; } echo "Enter your email<br /> <form action='' method='post'> <input type='text' name='email' /> <input type='submit' name='submit' /> </form>"; exit; ?>
 

Old thread, but I'll add that I would prefer isset() in this situation:

<?php session_start(); if(isset($_SESSION['sent'])){     echo "Successfully submitted form!";     $_SESSION = array();     session_regenerate_id();     session_unset();     session_destroy();     exit; } if(isset($_POST['submit'])){     //validate input & process form     $_SESSION['sent'] = 1;     header("location:form.php"); // name of this file     exit; } echo "Enter your email<br /> <form action='' method='post'> <input type='text' name='email' /> <input type='submit' name='submit' /> </form>"; exit; ?> 
</div
 
 

関連する質問

1  リダイレクトに関するIE9ユーザーエージェントの問題  ( Ie9 user agent issue on redirect ) 
セッションでUser-Agent検証を使用しています。ユーザーエージェントが変更されている場合は、セッションを削除しています。 しかし、私はGoogle OAuthリダイレクトでIE9に対面しています。 IE9が当社のサイトを打っているとき、すなわち有効...

0  JSPのログアウトコード  ( Logout code in jsp ) 
基本レベル認証を使用しており、JSP /サーブレットで最適なログアウトコードが必要です。 私はJSPとAMPを使っています。バックエンドとしてのサーブレットとMS-Access。 JSPでセッションを作成する必要がありますか? ...

0  ASP.NETのState Serverモードで使用可能なセッション値の長さについて  ( For how long are session values available in state server mode in asp net ) 
モードが状態サーバーのときにセッション値がどのくらい利用可能になる時間をお知らせください。ありがとう! ...

9  アーキテクチャの立場から、最高のアプローチセッション[]または暗号化されたクッキーとは何ですか?  ( From an architecture stand point what is a best approach session or encrypted ) 
私たちは、Webアプリケーション全体で州を維持するための最良の決定を決定しようとしています。ブラウザで暗号化されたCookieを使用する傾向がありますが、私たちの開発者の一部は、サーバー上のセッション変数を使って行くべきだと思います。 クッキーが最良のアプロ...

10  すべてのユーザーセッションを終了せずにweb.configを変更することは可能ですか?  ( Is it possible to change web config without ending all user sessions ) 
サイト上のすべてのユーザーに新しいセッションを与えることなくweb.configファイルを変更することは可能ですか? ...

3  アプリケーションウィンドウの状態を保存して復元する[閉じ]  ( Saving and restoring application window state ) 
閉じたこの質問はオフトピックです。現在答えを受け付けていません。 この質問を改善したいですか?質問を更新するスタックオーバーフロ...

0  PHP:セッション内のOutSyncまたはConcurrentセッション変数配列  ( Php outsync or concurrent session variable arrays inside session ) 
PHPセッション変数に本当にWierd問題があります。セッションIDに基づいて、当然可能なのと同じセッション内に二重変数があるように見えます。 問題は、ページの枠内のフォームが送信されたときに「Quote」セッション変数が同じままになるべきであるということで...

0  すべてのブラウザでシングルセッションの分布  ( Single session shairing in all browser ) 
私のウェブサイト(PHP)で、IEブラウザからのセッションを作成した場合は、Mozillaなどの他のブラウザのサイトを開くとログインする必要はありません。 全サイトでシングルセッションを共有することは可能ですか? ...

0  ASP.NET/ASP.NET MVCでユーザーがパスワードを変更するときに、オートログインクッキーを期限切れにする方法  ( How to expire any auto login cookie when user change password in asp net asp net ) 
私のプロジェクトでASP.NETフォーム認証方法を使用して、下記のコードのようにユーザーのCookieのユーザーIDとしてログイン情報を保存します。問題なくうまく機能します。 <事前> <コード> FormsAuthentication.SetAuthCoo...

0  Struts2コンテキスト処理  ( Struts2 context handling ) 
Hibernateのデータベースのセッション管理には何らかのヘルプが必要です。 Struts2とHibernateを使って作業する。私はシンプルなアプリを経験しました。私は起動時にデータベース接続を起動したいので、私が要求するたびに接続オーバーヘッドをする必...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有