2012-01-12 14 views
3

私は奇妙なシナリオに直面しています。基本的に私が行っているすべてのウェブページに自動セッションの有効期限

session_start(); 
if(!isset($_SESSION['login'])) 
    header("Location: login.php"); 

すべてのユーザーが最初にログインしたことを確認してください。私はクロームで作業しています。私は自分のWebアプリケーションにログインし、それが正常に動作するページを開くとどうなりますか?同時に、別のタブで私が自分のホスティングサーバーにログインしている場合、私は自分のWebアプリケーションからログアウトしています。私のアプリケーションに再度ログインすると、私は私のホストサーバーからログアウトしています!!

私は間違っていますか?セッション変数をチェックしたり設定したりするのに問題がありますか?

//if authentication successful 
session_start(); 
    $_SESSION['login'] = "1"; 
+0

セットの 'のために、重複しない値を使用して確認する必要があります$ _SESSION ['login'] '〜' 1'' '' 1 ''' –

+0

ホストサーバーはあなたのWebアプリケーションと同じドメイン名を使用していますか? –

+3

@alex:これらの違いはありますか? ジョージ:はい、同じです。 – samach

答えて

1

私は非常によく似た問題を抱えている、と私は、これは、同じドメインの同じ場所に」で、同じ名前を持つという理由だけで2つのセッションが起こると思う:次のように

私はセッションを設定しています共存する。

解決策は、セッションCookieを使用することです。クッキーは、ドメイン全体ではなく、フォルダに対してのみ設定できます。このようにして、同時に2つのセッションを管理できると思いますが、わかりません。 /public/は、あなたのサイトが配置されている特定のフォルダ、またはアプリケーションのパス(これを指摘してくれてありがとうポール)であるかもしれない

session_start(); 
setcookie(session_name(), session_id(), 0, '/public/'); 

はこれを試してみてください。

$session_cookie = 
    isset($_COOKIE[ini_get('session.name')]) ? 
    $_COOKIE[ini_get('session.name')] : 
    null; 

他のセッションは、Webアプリケーションのルートフォルダに「保存」される可能性がありますので、おそらくこれは、動作しません。

その後、セッションが設定されているかどうかをチェックします。しかし、上記のことをホスティングサーバーでも行うことができれば、問題を解決する必要があります。

また、Webアプリケーションでセッションの別の名前を設定することもできます。

これが役に立ちます。

+2

この回答は本質的には良いですが、 '/ public'のようなランダムなディレクトリにインストールされていると、アプリケーションパスを使用する必要があります。そのdirのクッキー。 Read:http://www.php.net/manual/en/function.setcookie.phpおよびhttp://php.net/manual/en/function.session-set-cookie-params.php – Paul

1

私は、両方のホストが同じネットワーク名を持っているということが原因だと思います。 test.www.example.comとwww.example.com

ただ、テストマシンに別のネットワーク名を使用して、それが仕事をしたり、あなたが明示的にsession.cookie_domainにより

関連する問題