[英]How can I send PHPSESSID in the URL?
我正在尝试通过HTTP GET变量为无cookie客户端发送PHPSESSID。
我在各种drupal实现中已经看到过这种情况,其中?PHPSESSIONID=123ABC
附加到每个链接,但是我如何在PHP中指定它,是否有任何方法可以更改GET参数,因此它可以是?token = 123ABC,甚至是已发送通过HTTP POST?
标准LAMP堆栈,运行Zend框架。
谢谢!
使用cookie或不使用cookie由以下PHP选项配置:
如果设置了第一个,则尽可能使用cookie。
PHP应检测是否启用了cookie,并且仅在客户端支持cookie时才使用它们。
要启用通过GET而不是cookie传递会话ID,您可能必须激活session.use_trans_sid ,默认情况下禁用(这意味着,通过defaut,会话ID仅通过cookie传递 - 永远不会通过GET传递) 。
但请注意,启用此选项后,PHP将至少通过GET传递会话ID,因为他们将首先访问您网站的每个用户的第一页...因为他们最初不会拥有cookie,而且只能通过检查他们是否支持cookie是通过设置一个,并尝试在下一页上阅读它。
并且不支持cookie的用户,包括我可能会说的搜索引擎,会有会话ID - 这不是很好:-(
而且,您可能还想查看session.name来设置密钥的名称(设置为“token”而不是“PHPSESSID”,我的意思是)
有关更多详细信息,您可以查看手册的“ 会话处理”部分:-)
手动完成:
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>");
您可以使用php.ini文件中的session_name()
或session.name
(或使用ini_set()
)更改PHPSESSID。
对于无cookie客户端,有session.use_trans_sid
php.ini选项 - 您应该知道这可能会导致问题 - 例如用户将具有会话ID的URL相互传递,或者搜索引擎获取此类URL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.