2015-10-05 48 views
3

我的工作,做了以下第三方PHP服务器上:PHP cookie处理 - 正确的方法? (登录/注销)

当用户登录:

ini_set("session.name","APPSESSID"); 
session_start(); 

当用户登出:

unset($_SESSION['user']); 
unset($user); 
session_destroy(); 

问题是,在注销时,APPSESSID实际上并未在客户端浏览器中被删除。它在注销时获得了不同的值(看起来它变成了所谓的匿名cookie)

这是造成问题的原因,因为我有一个web套接字API,用于检查UA是否在其连接请求中发送APPSESSID cookie,这个cookie即使在它从PHP应用程序注销之后也由客户端发送,因为该cookie不会真正被删除,只是被重写。

如何确保cookie在注销时实际上被删除?

感谢

+1

看到这里的最高得分答案:http://stackoverflow.com/questions/2241769/php-how-to-destroy-the-session-cookie-correctly –

+2

[RTFM(HTTP:/ /php.net/session_destroy):'不会取消设置任何与会话相关的全局变量,或者取消设置会话cookie。如果你想销毁appsessid cookie本身,你必须用'setcookie()'调用来解除它。 –

+0

我已经阅读了@ChrisLear指出的得分最高的答案,并已阅读我需要删除的答案。请看下面我对Federioc的回答的回复。我错过了什么?谢谢 – user1361529

回答

1

由于documentation

如果一个cookie被用于传播的会话ID(默认行为), 那么会话cookie必须删除。 setcookie()可用于 那。

if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 
+0

问题是,即使按照上面的代码删除cookie后,它仍然保留在浏览器中(用不同的值写入)。我的登出代码在这里http://pastebin.com/y8B55RQS。我在粘贴的登录代码中做错了什么? – user1361529

+1

用不同的值写_gets - 你重新启动会话吗? – Federkun

+0

AHA!我认为你是对的。第三方PHP服务器似乎在index.php中做了一个“ini_set('session.name','APPSESSID'); session_start()”,当你注销它时,加载index.php让你回到登录屏幕! !!!!我认为这应该在用户登录屏幕! – user1361529