我正在尝试让我的脚本使用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
答案 0 :(得分:4)
使用url传递会话ID时要小心,这可能导致通过referer进行会话劫持!
答案 1 :(得分:3)
看起来您只需要在第二页上调用session_start()。
来自文档:
session_start()根据通过请求传递的当前会话ID(例如GET,POST或cookie)创建会话或恢复当前会话。
修改强>
也就是说,您也可以尝试从查询字符串中手动抓取会话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。
答案 2 :(得分:2)
我的问题是在FF中使用Flash(因为闪存搭载IE,因此flash对象和firefox之间不会共享会话)
使用php 5.3所有这些答案都指出了事实。我最终发现的工作非常简单..在查询字符串中传递id。设置它。然后开始会议。
session_id($_GET['PHPSESSID']);
session_start();
答案 3 :(得分:2)
而不是硬编码'PHPSESSID'
,请使用:
session_id($_GET[session_name()]);
答案 4 :(得分:0)
稍作修正... 不要忘记检查参数是否存在。 这对我来说很好。
pip install import-java