通过url传递会话ID

时间:2009-05-06 03:27:50

标签: 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 );

关注页面 - 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

5 个答案:

答案 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