我尝试通过HTTP GET变量为无cookie的客户机发送PHPSESSID。
我已经在不同的drupal实现中看到了这一点,其中?PHPSESSIONID=123ABC
被附加到每个链接,但是我如何在PHP中指定这一点,有什么方法可以将GET参数更改为?token=123ABC,或者甚至通过HTTP POST发送?
标准LAMP堆栈,运行Zend框架。
谢谢!
发布于 2009-08-07 10:54:23
使用或不使用cookie由以下PHP选项配置:
session.use_cookies
session.use_only_cookies
如果设置了第一个,则会尽可能使用cookie。
PHP应该检测是否启用了cookie,并仅在客户端支持它们时才使用它们。
要启用通过GET而不是cookies传递会话id,您可能必须激活session.use_trans_sid,这在默认情况下是禁用的(这意味着,默认情况下,会话id只通过cookies传递,而不是通过GET传递)。
但请注意,激活此选项后,PHP将通过GET传递会话id,至少对于站点的每个用户将访问的第一个页面...因为他们一开始不会有cookie,检查他们是否支持cookie的唯一方法是设置一个,并尝试在下一页重新阅读它。
而那些不支持cookie的用户,包括我可能会说的搜索引擎,将拥有这个会话id --这可不好用:-(
而且,您可能还希望查看session.name来设置密钥的名称(我的意思是设置为"token“,而不是"PHPSESSID”)
有关更多详细信息,请参阅手册的Session Handling部分:-)
发布于 2009-08-07 10:48:29
您可以在php.ini文件中使用session_name()
或session.name
(或使用ini_set()
)更改PHPSESSID。
对于无cookieless客户端,有session.use_trans_sid
php.ini选项-您应该意识到这可能会导致问题-例如,用户相互传递带有会话in的URL,或者搜索引擎拾取此类URL。
发布于 2009-08-07 11:29:05
手动执行此操作:
if ($_REQUEST['token'])
session_id($_REQUEST['token']);
session_start();
print("foo=".$_SESSION['foo']++."<br />".
"<a href={$PHP_SELF}?token=".session_id().">link</a><br />");
print("<form method=POST>".
"<input type=hidden name=token value=".session_id()." />".
"<input type=submit /></form>");
https://stackoverflow.com/questions/1244087
复制相似问题