5

我试图让我的脚本使用 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 );

以下页面 - 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())

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

数组 ( [debug] => no ) pt1t38347bs6jc9ruv2ecpv7o2

4

5 回答 5

6

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

于 2009-05-06T05:24:54.190 回答
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());

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

于 2009-05-06T03:45:17.220 回答
2

我的问题是在 FF 中使用 Flash(因为 Flash 搭载 IE,因此在 Flash 对象和 firefox 之间不共享会话)

使用 php 5.3 所有这些答案都指向了事实。我最终发现工作非常简单.. 在查询字符串中传递 id。设置它。然后开始会话。

session_id($_GET['PHPSESSID']);
session_start();
于 2009-10-25T04:50:24.620 回答
2

而不是 hardcoding 'PHPSESSID',使用这个:

session_id($_GET[session_name()]);
于 2011-01-02T15:48:34.497 回答
0

只是一点点更正......不要忘记检查参数是否存在。这对我很有效。

if (isset($_GET['PHPSESSID'])) {
  session_id($_GET['PHPSESSID']);
}
session_start();
于 2020-03-30T07:05:48.743 回答