2012-03-12 3 views
0

私はログイン/ログアウトシステムを持っており、www.mydomain.comとmydomain.comをまたいだクッキーが必要です。私が持っている問題は、クッキーを削除することです。作品PHPのサブドメイン(www)のクッキーを共有/削除

session_start(); 
//set session vars 
setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30), '/', 'domain.com'); 
setcookie('full_name', $row['first_name']." ".$row['last_name'], time() + (60 * 60 * 24 * 30), '/', 'domain.com'); 

を、クッキーが保存され、それがでたり、WWWなしで動作します:ログインに私はこのようなクッキーを設定しています。

session_start(); 
if(!isset($_SESSION['user_id'])) { 
if(isset($_COOKIE['user_id']) && isset($_COOKIE['full_name'])) { 
    $_SESSION['user_id'] = $_COOKIE['user_id']; 
    $_SESSION['full_name'] = $_COOKIE['full_name']; 
} 
} 
if(!isset($_SESSION['user_id'])) { 
echo '<p class="login">Please <a href="login.php">log in</a> to access this page.</p>'; 
exit(); 
} 

問題がログアウトされています:それは、プロフィールページには、このコードを持っている見ることを可能にする

session_start(); 

if(isset($_SESSION['user_id'])) { 
$_SESSION = array(); 

if (isset($_COOKIE[session_name()])) { 
    setcookie(session_name(), '', time() - 3600, '/', 'domain.com'); 
} 

session_destroy(); 
} 
setcookie('user_id', '', time() - 3600, '/', 'domain.com'); 
setcookie('full_name', '', time() - 3600, '/', 'domain.com'); 

クッキーはなく、現在のドメインのみのために削除されます。だから私がdomain.com/login.phpからログインし、domain.com/logout.phpからログアウトすると、domain.com/profile.phpはうまく動かない(良い)が、私はまだwww.domain.com/profileを見ることができるだろう私がwwwを訪問した場合、.php。ログアウトする前にバージョンを確認してください。逆に、私はwww.domain.com/logout.phpからログアウトしても、domain.com/profile.phpを表示することができます。サブドメイン間ですべてのCookieを削除する方法はありますか?

+0

は最後にサブドメインが変更されたときに、セッションが別のクッキーを作成して、それを考え出しました。したがって、ログアウトするとセッションクッキーは1つ削除されますが、残りのセッションクッキーはそのまま残ります。解決策は、セッションを開始する前にセッションに名前を付けて、常に同じ名前を持つようにすることでした。 $ some_name = session_name( "cool_session"); session_set_cookie_params(0、 '/'、 '.domain.com'); session_start(); – aeroshock

答えて

0

代わりに 'domain.com'を使用して、すべてのサブドメインを処理します。

+0

ブラウザからすべてのCookieを手動でクリアしました(最新のSafariのバージョン)。ログインクッキーとログアウトCookieに.domain.comを追加しようとしましたが、同じことが起こります。他のアイデア? – aeroshock

1

ザ・OPはコメントに書いた:

は最後にサブドメインが変更されたときに、セッションが別のクッキーを作成して、それを考え出しました。したがって、ログアウトするとセッションクッキーは1つ削除されますが、残りのセッションクッキーはそのまま残ります。解決策は、それが常に同じ名前を持つので、それを開始する前に、セッションに名前を付けることだった:

$some_name = session_name("cool_session"); 
session_set_cookie_params(0, '/', '.domain.com'); session_start(); 
+0

([コメントで回答してコミュニティのWikiに変換](http://meta.stackoverflow.com/questions/251597/question-with-no-answers-but-issue-solved-in-the-comments) ) –