如果浏览器请求页面,是否只会创建PHP会话?我明确地使用session_start()启动会话,并使用session_name()预先命名它.
补充说明.我了解到我遇到的一个主要问题是我在命名会话而不是通过session_id设置会话ID($id);我使用session_name()的目的是检索先前创建的相同会话,正确的方法是将session_id设置为session_name.
似乎会话信息将持久存储在服务器上,如下所述(谢谢).但为了保持这一点,你必须传递会话ID,或者,如我的情况,任何其他唯一标识用户的id.使用此id作为session_id,您的会话将按预期运行.
请记住,HTTP是无状态的,因此会在您的服务器上跟踪会话,但客户端必须在每个请求中标识自己.当你声明session_start()时,你的浏览器通常会设置一个cookie(“PHP Session Id”),然后通过发送每个请求的cookie值来识别自己.使用具有会话值的请求调用脚本时,session_start()函数将尝试查找会话.为了向自己证明这一点,请注意当您清除cookie时会话会死亡.如果cookie是“会话”cookie(临时cookie),即使您退出浏览器,很多人也会死亡.您提到您正在命名会话..查看您的浏览器cookie并查看是否可以找到具有相同名称的cookie.
所有这一切都是说cookie在你的会话中扮演着积极的角色,所以如果客户端不支持cookie,那么就不能按照你现在的方式进行会话..至少不是那些替代客户.将在服务器上创建会话;问题是客户是否参与.
如果cookie不是您的客户的选项,您将不得不找到另一种方法将会话ID传递给服务器.例如,这可以在查询字符串中完成,尽管通过这种方式发送会话ID可能会被认为不那么私密.
mysite.com?PHPSESSID=10alksdjfq9e
具体如何根据您的PHP版本而有所不同,但它基本上只是一种配置.如果设置了正确的运行时选项,PHP将透明地将会话ID作为查询参数添加到页面上的链接(当然只有相同的源).您可以在PHP website上找到有关设置的详细信息.
旁注:多年前,这是尝试实施会话时的常见问题.由于存在安全问题,Cookie更新,许多人在浏览器中关闭了cookie支持.
旁注:@Uberfuzzy提出了一个很好的观点 – 使用curl或wget的会话实际上是可行的.问题是它不太自动化.用户可能会将标头值转储到文件中,并在将来的请求中使用这些值. curl有一些“cookie awareness”标志,允许你更轻松地处理它,但是你仍然必须明确地这样做.再说一遍,你可以利用这个优势.如果您的替代客户端上有curl,那么您可以使用cookie感知标志自己合理地拨打电话.参见curl manual.