2013-05-31 32 views
1

我想在php中使用会话,并没有变得很远。我所有的php页面都是通过单个“门户页面”中的ajax调用的。我使用会话在ajax调用之间存储信息。我有一个包含文件,它是每个ajax页面中第一个将session_start作为第一个方法调用的文件。会话数据似乎可以保存。但是,当我在用户注销页面完成时,我遇到了摆脱会话的问题。 登出页面是一个Ajax网页基本上做到这一点:php session_destroy后不会丢失会话数据

session_start(); 
    $_SESSION = array(); 
    if (ini_get("session.use_cookies")) { 
     $params = session_get_cookie_params(); 
     setcookie(session_name(), '', time() - 42000,$params["path"], $params["domain"], $params["secure"], $params["httponly"]); 
    } 
//code to unset session variables 
     session_destroy(); 

,如果我尝试写会话变量的注销页面在屏幕上它是空的,因为你所期望的。但是,如果我刷新门户网站页面并显示session_id屏幕,它与上次会话刚刚被销毁的ID相同。如果我关闭浏览器并再次打开它,我有一个新的会话

php会话cookie在注销页面被调用后仍然在浏览器cookie中。自然页面刷新将加载这个cookie。为什么cookie不被删除?我的代码有问题,或者它与ajax页面有关?

+0

你为什么在那里设置一个cookie?为什么要调用'$ _SESSION = array();'? – kelunik

+0

难道是你仍然保存会话ID在URL或隐藏的表单字段? –

+0

你确定你不是程序员吗? –

回答

0

当删除一个cookie时,cookie的删除将发生在告诉浏览器删除该cookie的请求中。但在该请求期间,Cookie仍然存在。因此,要查看在删除Cookie的调用中仍存在的Cookie是预期的行为。

因此在注销期间/注销后,Cookie仍然存在。该cookie只会在清除该cookie的请求后发送1个请求。

如果cookie在注销后仍然存在多个请求,请尝试将cookie从42000到(11小时)的TIME差值增加到90000(25小时)。也许你和客户之间有时区差异

+0

嗨。我不断刷新页面,cookie仍然存在。那么这些刷新不是单独的请求吗?由于我使用ajax,刷新计数是否与删除cookie相同?我通过在sepatate选项卡中输入url来重新加载页面,并且cookie仍然存在。我向域名提出其他请求,并且cookie仍然存在:) – user2274191

+0

你怎么知道cookie仍然存在?你用javascript看?用PHP?用萤火虫? –

+0

嗨。查看浏览器的cookie集合,并写出session_id屏幕,在注销之前和之后显示相同的值。 – user2274191