如何在URL中发送PHPSESSID?

时间:2009-08-07 10:44:54

标签: php url session

我正在尝试通过HTTP GET变量为无cookie客户端发送PHPSESSID。

我在各种drupal实现中看到过这种情况,其中?PHPSESSIONID=123ABC附加到每个链接,但我如何在PHP中指定它,是否有任何方法可以更改GET参数,因为它可能是?token = 123ABC ,甚至通过HTTP POST发送?

运行Zend框架的标准LAMP堆栈。

谢谢!

4 个答案:

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

  1. 创建登录页面,如果没有正确的ID和密码,用户不得登录。
  2. 登录后,用户来到家中,此处用户可以注销并返回登录页面。
  3. 用户不得在不通过登录页面的情况下访问主页。