我正在尝试通过HTTP GET变量为无cookie客户端发送PHPSESSID。
我在各种drupal实现中看到过这种情况,其中?PHPSESSIONID=123ABC
附加到每个链接,但我如何在PHP中指定它,是否有任何方法可以更改GET参数,因为它可能是?token = 123ABC ,甚至通过HTTP POST发送?
运行Zend框架的标准LAMP堆栈。
谢谢!
答案 0 :(得分:9)
使用cookie或不使用cookie由这些PHP选项配置:
如果设置了第一个,将尽可能使用cookie。
PHP应检测cookie是否已启用,并且只有在客户端支持时才使用它们。
要启用通过GET而不是cookie传递会话ID,您可能必须激活session.use_trans_sid,默认情况下禁用(这意味着,通过defaut,会话ID仅通过cookie传递 - 从不通过GET)。
但请注意,启用此选项后,PHP将至少通过GET传递会话ID,因为您的网站的每个用户都会来到第一页......因为他们最初没有cookie,并且检查他们是否支持cookie的唯一方法是设置一个,并尝试在下一页上阅读它。
不支持cookie的用户,包括我可能会说的搜索引擎,会有会话ID - 这不太好: - (
而且,您可能还需要查看session.name来设置密钥的名称(设置为“token”而不是“PHPSESSID”,我的意思是)
有关详细信息,您可以查看手册的Session Handling部分: - )
答案 1 :(得分:1)
您可以使用php.ini文件中的session_name()
或session.name
更改PHPSESSID(或使用ini_set()
)。
对于无cookie客户端,有session.use_trans_sid
php.ini选项 - 您应该知道这可能会导致问题 - 例如,用户将会话ID的URL传递给彼此,或搜索引擎获取此类URL。
答案 2 :(得分:1)
手动完成:
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>");
答案 3 :(得分:0)