通过 url 传递会话 ID

5 php url session ini-set

我试图让我的脚本使用 url 会话 ID 而不是 cookie。下面的页面没有选择 url 中的变量作为会话 id。我肯定错过了什么。

首页http://www.website.com/start.php

ini_set("session.use_cookies",0);
ini_set("session.use_trans_sid",1);
session_start();
$session_id = session_id();
header("location: target.php?session_id=". $session_id );
Run Code Online (Sandbox Code Playgroud)

以下页面 - http://www.website.com/target.php?session_id=rj3ids98dhpa0mcf3jc89mq1t0

ini_set("session.use_cookies",0);
ini_set("session.use_trans_sid",1);
print_r($_SESSION);
print(session_id())
Run Code Online (Sandbox Code Playgroud)

结果是不同的会话 ID,会话为空。

数组([调试] => 否)pt1t38347bs6jc9ruv2ecpv7o2

ste*_*efs 6

使用 url 传递会话 ID 时要小心,这可能会导致通过引用进行会话劫持!


Jer*_*gan 3

看起来你只需要在第二页上调用session_start()即可。

来自文档:

session_start() 根据通过请求(例如 GET、POST 或 cookie)传递的当前会话 ID 创建一个会话或恢复当前会话。

编辑:

也就是说,您也可以尝试手动从查询字符串中获取会话 ID。在第二页上,您需要执行以下操作:

ini_set("session.use_cookies",0);
ini_set("session.use_trans_sid",1);
session_id($_GET['session_id']);
print_r($_SESSION);
print(session_id());
Run Code Online (Sandbox Code Playgroud)

请注意,如果将 id 作为参数传递给session_id()函数,它将设置 id。