虽然我对session_id()没有那么具体,
我正在使用像这样的PHP代码
在a.php
我正在使用此代码
$_SESSION['sid']=session_id();
当我在b.php
时,我正在回复会话sid然后像这样取消它..
echo $_SESSION['sid'];
unset($_SESSION['sid']);
显示d5tk0123nmj56
再次当我访问a.php然后b.php我再次得到相同的结果d5tk0123nmj56
第二次会议sid与众不同???因为我已经取消了b.php
..
EDIT:
我正在localhost
ANOTHER EDIT
以描述的方式解释你,... 我正在使用购物车系统,首先我要检查用户是否通过他的电子邮件ID登录,因此$ _session ['logged_user'] = user_email是一个会话..我正在使用$ _session ['sid'] = session_id()作为识别购物车交易的唯一会话,在用户结账(支付)后他可能再次购买其状态为登录的东西,然后我必须再次检查他是否已登录(logged_user因此需要我希望为$ _SESSION ['sid'] =一个新的session_id();
分配给他另一个值。据我所知(可能是我错了)session_destroy()会杀死所有用户会话,这也会破坏会话$ _SESSION ['logged_user'] ..
答案 0 :(得分:4)
我想你想破坏会话。尝试
session_destroy();
重新生成会话ID尝试:
session_regenerate_id(true);
答案 1 :(得分:1)
这是因为用户仍然拥有相同的会话,从用户的角度来看,你决不会结束它。您只是在服务器端取消了一些会话数据。
会话ID通过cookie(默认称为PHPSESSID)发送到服务器。在b.php
中,您在服务器端取消设置会话数据,但下次用户访问a.php
时,他们将发送相同的Cookie并启动与之前ID相同的会话
session_destroy()
。 (这不会更改会话ID或取消设置客户端cookie) session_regenerate_id(true)
。 (这将使用新的会话标识符覆盖客户端cookie。它不会破坏与会话关联的服务器端信息) 完全结束用户'会话,您需要销毁服务器端信息,客户端cookie,并生成新的会话标识符。这是一个简单的例子,
<?php
session_start();
$_SESSION['blah'] = true;
var_dump(session_id()); // q4ufhl29bg63jbhr8nsjp665b1
var_dump($_SESSION); // blah = true
session_unset();
session_destroy();
setcookie("PHPSESSID", "", 1); // See note below
session_start();
session_regenerate_id(true);
var_dump(session_id()); // gigtleqddo84l8cm15qe4il3q3
var_dump($_SESSION); // (empty)
?>
标题将显示客户端更改的会话ID:
请求标题
饼干:PHPSESSID = q4ufhl29bg63jbhr8nsjp665b1
响应标题
设置Cookie:PHPSESSID =删除;到期=周一,27-Dec-2010 16:47:57 GMT
PHPSESSID = gigtleqddo84l8cm15qe4il3q3;路径= /
(你可以在没有setcookie()
电话的情况下离开,因为你无论如何都要创建一个新的会话,因此新的ID会覆盖cookie,但它会被覆盖。明确销毁旧cookie的良好做法。
答案 2 :(得分:1)
你没有以这种方式杀死会话,你只需取消设置一个包含会话ID的变量。如果你这样做了:
$unsetMe = session_id();
unset($unsetMe);
你只是取消设置变量,对会话不会做任何事情。你需要使用:
session_destroy();
答案 3 :(得分:0)
取消设置server-global-var $_SESSION['sid']
,而不是真正的会话ID
使用session_destroy();
“取消设置”session_id
答案 4 :(得分:0)
生成新的会话ID并将其存储在旧ID的位置:
$_SESSION['sid']=session_regenerate_id(true);