通过URL传递会话ID

问题描述 投票:4回答: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,该会话为空白。

Array([debug] => no)pt1t38347bs6jc9ruv2ecpv7o2

php url session ini-set
5个回答
5
投票

使用URL传递会话ID时要小心,这可能导致通过引荐来源劫持会话!


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());

请注意,session_id()函数将在将id作为参数传递时设置其id。


2
投票

代替硬编码'PHPSESSID',使用此:

session_id($_GET[session_name()]);

2
投票

我的问题是在FF中使用Flash(因为Flash背负IE,所以会话不在Flash对象和Firefox之间共享)

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

session_id($_GET['PHPSESSID']);
session_start();

0
投票

只需稍作修正...不要忘记检查参数是否存在。这对我来说很好。

if (isset($_GET['PHPSESSID'])) {
  session_id($_GET['PHPSESSID']);
}
session_start();
© www.soinside.com 2019 - 2024. All rights reserved.