session_id()错误

时间:2013-01-07 03:07:09

标签: php session sessionid

虽然我对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'] ..

5 个答案:

答案 0 :(得分:4)

我想你想破坏会话。尝试

session_destroy(); 

重新生成会话ID尝试:

session_regenerate_id(true);

答案 1 :(得分:1)

这是因为用户仍然拥有相同的会话,从用户的角度来看,你决不会结束它。您只是在服务器端取消了一些会话数据。

会话ID通过cookie(默认称为PHPSESSID)发送到服务器。在b.php中,您在服务器端取消设置会话数据,但下次用户访问a.php时,他们将发送相同的Cookie并启动与之前ID相同的会话

  • 要取消设置服务器端会话数据,您应该使用session_destroy()(这不会更改会话ID或取消设置客户端cookie)
  • 要生成新的会话ID,您可以使用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

PHP: session_destroy() Manual

答案 4 :(得分:0)

生成新的会话ID并将其存储在旧ID的位置:

$_SESSION['sid']=session_regenerate_id(true);