Ass*_*Guy 4 php session sessionid
我正在开发一个在线机票预订系统,在成功预订后(付款后)我想清除会话ID.但事情是我无法清除它,虽然我曾经session_destroy()
破坏了会话.
注意:我已经回应了session_id以检查它是否重置.
网址:http://7sisters.in/7sislabs/
function book_final_tickets()
{
//var_dump($_SESSION);
$session_id = session_id();
$sql = "
UPDATE
tbl_seat_book
SET
final_book = 'Y'
WHERE
session_id = '$session_id'
";
//session_unset();
if($r = $this->db->executeQuery($sql)){
if(session_destroy()){
unset($session_id);
echo 'Booking successfull';
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*ams 10
session_destroy()
单独不会删除客户端cookie,因此下次用户访问时,他们仍然会设置相同的会话ID(但他们的服务器端会话信息将被销毁).
从文档(强调我的):
session_destroy()销毁与当前会话关联的所有数据.它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie....为了完全终止会话,要将用户注销,还必须取消设置会话ID.如果使用cookie来传播会话ID(默认行为),则必须删除会话cookie.
您可以使用它session_regenerate_id(true)
来生成新的会话ID并删除旧的会话ID.请注意,这会将所有信息保留$_SESSION
为新会话ID的一部分,因此session_destroy
如果要清除会话信息并重新开始,仍需要使用.
例如
<?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)
?>
Run Code Online (Sandbox Code Playgroud)
标题将显示客户端更改的会话ID:
请求标头
Cookie:PHPSESSID = q4ufhl29bg63jbhr8nsjp665b1
响应标头
集 - Cookie:PHPSESSID =已删除; expires =周一,27-Dec-2010 16:47:57 GMT
PHPSESSID = gigtleqddo84l8cm15qe4il3q3; 路径= /
(你可以在没有setcookie()
调用的情况下离开,因为你无论如何都要创建一个新会话,所以cookie会被新ID覆盖,但明确销毁旧cookie是一种好习惯).
session_id
之前调用session_start
,并session_id
手动设置。
示例 1:将使用相同的 session_id
<?php
session_start();
echo session_id(); //4ef975b277b52
session_destroy();
session_start();
echo session_id(); //4ef975b277b52
?>
Run Code Online (Sandbox Code Playgroud)
示例2:手动设置session_id
(之前调用session_start()
)
<?php
session_id(uniqid());
session_start();
echo session_id(); //4ef975d3d52f5 (A)
session_destroy();
session_id(uniqid());
session_start();
echo session_id(); //4ef975d3b3399 (B)
?>
Run Code Online (Sandbox Code Playgroud)
(A) != (B),因此您可以手动设置session_id,请参阅http://php.net/manual/en/function.session-id.php以获取更多信息。
另一个解决方案,不要使用 session_id() ,只需创建新的会话数组:
<?php
$_SESSION['booked'] = false;
if($r = $this->db->executeQuery($sql))
{
$_SESSION['booked'] = true;
echo 'Booking successfull';
}
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6841 次 |
最近记录: |