0

虽然我对 session_id() 不是那么具体,

我在 php 中使用这样的代码

a.php我使用这个代码

$_SESSION['sid']=session_id();

当我在时b.php,我正在回显会话 sid,然后像这样取消它..

echo $_SESSION['sid'];
unset($_SESSION['sid']);

显示d5tk0123nmj56

当我再次访问 a.php 和 b.php 时,我再次得到相同的结果d5tk0123nmj56

shudnt 第二次会话 sid 不同???b.php因为我已经在..中取消了会话

EDIT:

我正在测试它localhost

ANOTHER EDIT

为了描述性地解释你们,..我正在使用购物车系统,首先我检查用户是否通过他的电子邮件ID登录,因此 $_session['logged_user']=user_email 是一个会话..我正在使用$_session['sid']=session_id() 作为识别购物车交易的唯一会话,在用户结账(支付)后,他可能会再次以登录状态购买东西,然后我必须再次检查他是否已登录(logged_user 因此需要存在),对于下一个事务,我想为他分配另一个值 $_SESSION['sid']=a new session_id();

据我所知(可能是我错了) session_destroy() 会杀死所有用户会话,这也会破坏会话 $_SESSION['logged_user'] ..

4

5 回答 5

4

我认为您想破坏会话。尝试

session_destroy(); 

要重新生成会话 ID 尝试:

session_regenerate_id(true);
于 2013-01-07T03:11:07.617 回答
1

您并没有以这种方式终止会话,您只是取消了一个保存会话 ID 的变量。如果你这样做了:

$unsetMe = session_id();
unset($unsetMe);

您只需取消设置一个变量,就不会对会话进行任何操作。你需要使用:

session_destroy();
于 2013-01-07T03:23:51.130 回答
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:

请求头
Cookie:PHPSESSID=q4ufhl29bg63jbhr8nsjp665b1

响应头
设置-Cookie:PHPSESSID=deleted; expires=星期一,2010 年 12 月 27 日 16:47:57 GMT
PHPSESSID=gigtleqddo84l8cm15qe4il3q3;路径=/

(您可以在setcookie()此处不调用,因为无论如何您都在创建一个新会话,因此 cookie 将被新 ID 覆盖,但明确销毁旧 cookie 是一种很好的做法)。

于 2013-01-07T03:17:29.153 回答
0

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

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

于 2013-01-07T03:32:45.543 回答
0

您取消设置 server-global-var $_SESSION['sid'],而不是真正的会话 ID

用于session_destroy();“取消设置” session_id

PHP: session_destroy() 手册

于 2013-01-07T03:11:45.603 回答