2012-01-31 25 views
0

ユーザが自分のウェブサイトに戻ると、最後のセッションを$_COOKIE連想配列から復元しようとします。期待どおりに機能しません。私はブラウザのクッキーマネージャーを見て、クッキーがそこにあるのを見ることができますが、彼らは$_SESSION連想配列に保存されていないようです。PHPセッションがクッキーから復元されない

時に自分のサイトにユーザーが戻るこれは本質的にプログラムの流れです:

foreach ($_COOKIE as $name => $val) 
    { 
     $_SESSION[$name] = $val; 
    } 

    session_start(); 

    ... 

    $some_var = $_SESSION[$var_name]; 

私は順不同で物事を持っていますか、または私はPHPSESSIDを上書きすべきではありませんか?私が間違っていることについての洞察は高く評価されます。ありがとう。

+3

あなたは、これは完全に間違っています。あなたがしなければならない*唯一のことは 'session_start()'を呼び出すことです - '$ _COOKIE'を忘れると、PHPはこれをあなたのためにすべて行います。 – DaveRandom

+0

したがって、私は手動でクッキー( 'setcookie')を保存し、' session_start'はそれらを自動的に '$ _SESSION'連想配列に保存しますか? –

+0

'setcookie()'は必要ありません。 'session_start()'を呼び出すと自動的にクッキーが設定されます。 – DaveRandom

答えて

2

セッションとCookieが混在しています。 $ _COOKIE配列に物を入れる必要はありません。単にsession_start()を使って、$ _SESSIONに物事を入れてください。 PHPは自動的にセッション/クッキーを管理します。

$ _COOKIE変数はユーザーのブラウザに格納されているため、安全ではなく、ユーザー=>セキュリティリスクによって操作できます。

$ _SESSION変数は、サーバーにのみ格納されます。クッキーに格納されるのはsession_idだけなので、$ _SESSION変数は操作できません。

それは意味がありますか?

+0

私は$ _COOKIEと$ _SESSIONの違いを理解しています。ユーザがサイトに戻ったときにPHPがセッションデータを復元する方法を知っていますか?彼がいつか私のウェブサイトにログオンし、自分のコンピュータをシャットダウンし、翌日にサイトに戻るとしよう。ログイン情報を復元する方法を知っているので、再度ログインする必要はありません。 –

+0

'session_set_cookie_params()'を使ってライフタイムを指定すると、セッションの持続時間を指定できます。デフォルトでは、ブラウザが閉じられるまでです。また、セッションをしばらく保存している場合は、PHPセッションのガベージコレクションの設定を確認してください。クッキーが有効であっても、PHPはセッションファイルをサーバからクリアしている可能性があります。 – Mark

+0

私は、この機能を後のバージョンのアプリケーションに延期することに決めました。私は今のところあなたの答えを受け入れています。なぜなら、それは最も理にかなっていて、最も多くの投票権を持っているからです。ありがとう。 –

1

session_start()を他に先立って入力します。この関数は、アクセスするセッションデータを$_SESSIONに初期化します。

ない正確にあなたがそれをすべての残りの部分で達成しようとしたが、session_start()最初の出発点であることを確認しているもの...

+0

ユーザがサイトに戻ったときにPHPがセッションデータを復元する方法を知っていますか?彼がいつか私のウェブサイトにログオンし、自分のコンピュータをシャットダウンし、翌日にサイトに戻るとしよう。ログイン情報を復元する方法を知っているので、再度ログインする必要はありません。 –

+0

@ JimFellそうではありません。セッションはブラウザセッションのためのものであり、あなたが設定した任意の期間のクッキーです。もちろん、それらを互いに調整して使うことができます。 – jcmeloni

関連する問題