我正在尝试让我的脚本使用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,该会话为空白。
Array([debug] => no)pt1t38347bs6jc9ruv2ecpv7o2
使用URL传递会话ID时要小心,这可能导致通过引荐来源劫持会话!
看来您只需要在第二页上拨打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());
请注意,session_id()函数将在将id作为参数传递时设置其id。
代替硬编码'PHPSESSID'
,使用此:
session_id($_GET[session_name()]);
我的问题是在FF中使用Flash(因为Flash背负IE,所以会话不在Flash对象和Firefox之间共享)
使用php 5.3,所有这些答案都指向了事实。我终于发现可以工作的非常简单..在查询字符串中传递ID。设置它。然后开始会议。
session_id($_GET['PHPSESSID']);
session_start();
只需稍作修正...不要忘记检查参数是否存在。这对我来说很好。
if (isset($_GET['PHPSESSID'])) {
session_id($_GET['PHPSESSID']);
}
session_start();