2

ユーザーのログイン時にユーザー ID を保存しましたが、いつか失われることがわかりました。セッションが失われる一般的な理由は何ですか?

私はタイムアウトプラグインを使用しました(しばらくアイドル状態になると警告が表示され、ログアウトに役立ちます)、ページ間で転送するJavaScriptがいくつかあります

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"/> 

セッションの設定を解除しますが、それが理由ではないでしょうか?

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

clear.php

    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']);

これは店舗セッションに使用されます

$user=$_SESSION['username'];

ありがとうございました

4

2 に答える 2

1

PHP がセッションでゼロ以外の有効期限を処理する方法にも欠点があります。基本的に、セッション Cookie を 15 分で期限切れになるように設定すると、セッションの開始から 15 分で期限切れになります...その有効期限は更新されません。

ユーザーが「何かをする」たびに更新されるセッションを実行するには、有効期限をセッション変数として保存し、セッションの起動時にその変数をチェックし、必要に応じてセッションを再生成する必要があります。

以前、セッションの開始時にセッション Cookie の有効期限を更新しようとしましたが、興味深い問題が発生しました。

可能性は非常に低いですが、セッション ガベージ コレクションの有効期間が Cookie の有効期限より短い可能性もあります。これらの一般的なセッションの問題のいくつかに対処できるini 変数が多数あり、実行時に設定することでそれらのほとんどをオーバーライドできます。

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

個人的には、すべてのセッション処理を (Singleton パターン) クラスに入れ、コンストラクターで検証と有効期限を処理します。

于 2012-04-05T15:22:03.770 に答える
1

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

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

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

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

  1. 通常、webapplication からログアウトするときは、session1234 サーバー上のファイルを破棄する session_destroy() を使用します。そのため、ユーザーが Cookie コンテンツ session1234: no ファイル session1234 がサーバーに存在する (ログアウトで削除された) サイトを再度呼び出すと、ユーザーは認証されません。
  2. タイムアウトが発生します: ファイル session1234 がサーバーの既定の 20 分 (php.ini で構成可能) から削除されます。ユーザーが再びサイトを呼び出した場合は、以前と同じです。ユーザーがアクションを実行する (サーバーを呼び出す) たびに、サーバーはセッション ファイルの存続時間を更新します。
  3. ユーザーがブラウザーの Cookie を消去する (誰かがブラウザーの履歴を消去したい場合に発生する可能性があります): Cookie が失われ、ブラウザーは Cookie を送信せず、サーバーは Cookie を受信せず、ユーザーを認証できません。

それが役に立てば幸い

于 2012-04-05T15:07:27.683 に答える