【发布时间】:2012-03-29 05:52:50
【问题描述】:
我有一个登录/注销系统,需要 cookie 才能在 www.mydomain.com 和 mydomain.com 上工作。我遇到的问题是删除 cookie。在登录时,我正在设置这样的 cookie:
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');
哪个有效,cookie 被保存,无论有没有 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');
cookies 被删除,但仅限于当前域。因此,如果我从 domain.com/login.php 登录并从 domain.com/logout.php 注销,domain.com/profile.php 不起作用(很好),但我仍然可以查看 www.domain.com/profile .php 如果我访问过 www。退出前的版本。反之亦然,我可以从 www.domain.com/logout.php 注销,仍然可以查看 domain.com/profile.php。有没有办法删除子域中的所有 cookie?
【问题讨论】:
-
终于弄清楚了,当子域发生变化时,会话正在创建一个单独的cookie。因此,注销会删除一个会话 cookie,但会留下另一个。解决方案是在启动会话之前为其命名,使其始终具有相同的名称: $some_name = session_name("cool_session"); session_set_cookie_params(0, '/', '.domain.com'); session_start();
标签: php cookies save subdomain