2012-04-05 8 views
1

私はユーザーログイン時にユーザーIDを保存していますが、セッションが失われた理由は何ですか?私はタイムアウトプラグイン(いつかのためのアイドルが警告し、あなたがログアウト助ける)を使用しているPHPでセッションが失われた理由を確認するには?

とページ

You have edited the list. <a href='view.php' onClick='window.location.reload()'>Back</a></div>

<input type="button" value="Back" onclick="location.href='add.php'" class="btn" style="width:100px"/> 

と未設定の間でセッションを転送するためにいくつかのjavascriptがありますが、それ理由はないはずですか?

$(function(){ 
    $("#closeTab").click(function() { 
      $.post("clear.php",function(data){ 
      window.parent.$('#tt').tabs('close','Create List'); 
      location.reload();  
     }); 
    }); 
}); 

$user=$_SESSION['username']; 

はありがとう

if (isset($_SESSION['lname'])) 
unset($_SESSION['lname']); 
if (isset($_SESSION['creminder'])) 
unset($_SESSION['creminder']); 
if (isset($_SESSION['subscribe'])) 
unset($_SESSION['subscribe']); 
if (isset($_SESSION['unsubscribe'])) 
unset($_SESSION['unsubscribe']); 

これは店のセッションのために使用されているclear.php

+0

$ _SESSION ['SID']の設定を解除すると、内容は失われますか?それともあなたの質問ではありませんか? – Bono

+0

あなたの質問が実際に問題であるか問題であるかをより明確に説明すると、おそらく答えが得られます。 – buymypies

+0

単純に 'unset($ _ SESSION)' – Dion

答えて

1

PHPがセッションをこのように管理します。

ときのsession_start()ファイルo n Webサーバーが作成されます。このファイルは、例えばsession1234と呼ばれるテキストファイルである。ユーザーブラウザでCookieが設定されると、Cookieには値 "session1234"が含まれます。ユーザーが同じドメイン上のページを呼び出すたびに、ブラウザはそのCookieをサイレントに送信します。

したがって、ユーザーが認識され、ユーザーのセッションデータがサーバー上のセッションファイルから取り出されます。

理由は、セッションが期限切れになる:

  1. 通常webアプリケーションからのログアウトが、我々は、サーバーsession1234上のファイルを破壊するsession_destroy()を使用する場合。したがって、ユーザーがクッキーの内容を持つサイトを再度呼び出すと、セッション1234:ファイルがありませんsession1234がサーバーに存在し(ログアウトで削除されています)、ユーザーは認証されていません
  2. タイムアウトが発生しました:ファイルsession1234がサーバーのデフォルト20分.ini)。ユーザーが以前と同じようにサイトを再度呼び出す場合。ユーザーが操作(サーバーを呼び出す)するたびに、サーバーはセッションファイルの有効期間を更新します。
  3. ユーザーはブラウザのCookieをクリアします(ブラウザの履歴を消去したい場合に発生する可能性があります)。ブラウザは、サーバーがそれを受信しないクッキーを送信しないと、ユーザーを認証しないことができ

は、PHPがセッションの非ゼロの失効を処理する方法の虚もあります

+1

4.サーバ誤った設定はCookieのパス/ドメインを間違って設定し、他のディレクトリやサブドメインのサイトの他の部分には「見えない」ようになります。 –

+0

ファイルsession1234がサーバーのデフォルトの20分から削除されました。サーバーの設定に問題がある可能性があります。この設定のタイトルは何ですか?ありがとう – user782104

1

をお役に立てば幸いです。基本的に、セッションCookieを15分で期限切れにすると、セッションの開始から15分が経過します...期限切れの時間は更新されません。

ユーザーが何かを行うたびに更新するセッションを実行するには、有効期限をセッション変数として保存し、セッションを起動するときにその変数を確認し、必要に応じてセッションを再作成します。

セッションが開始されたときにセッションクッキー内の有効期限を更新しようとしました... it led to some interesting problems

セッションガーベジコレクションの有効期間は、Cookieの有効期限の有効期間を下回っている可能性もあります。これらの共通のセッション問題の一部に対処することができますし、実行時にそれらを設定することにより、それらのほとんどを無効にすることができini variablesの負荷があります。

ini_set('session.gc_maxlifetime' 900); 
ini_set('session.cookie_lifetime' 0); //ALWAYS set this to 0 - so the cookie will only expire when the browser is closed 
ini_set('session.cookie_domain', '.domain.ext'); //always start with a "." if you want to cover multiple sub-domains 
ini_set('session.cookie_path', '/'); //always use "/" unless you want to limit the cookie to a specific path "/admin" for instance 
個人的に

、私はにものを扱うすべてのセッションを置くところ(シングルトンパターン)クラスを作成し、コンストラクターで検証と有効期限を処理します。

+0

perharpsそれはサーバー設定の問題です、どうすれば確認できますか?ありがとう – user782104

関連する問題