2013-02-20 51 views
3

背景:Web服务器何时清除PHP会话标识符?

我想写定期到Web服务器并检查连接,如果在特定页面上的一些信息被改变的脚本。我已经使用bash(用于脚本),curl(用于实际连接)和crontab(用于调度)的组合工作。

由于服务器需要身份验证,我首先使用curl在登录页面上使用我的凭据执行POST请求并保存cookie文件(包含PHPSESSID)。现在我可以使用cookie文件来处理我想要查看的实际网页的请求。

问题(S):

  1. 什么时候服务器实际上清楚,我设定我的第一个请求PHPSESSID?我想有时候必须这样做,否则它会崩溃,因为它会一直存储关于每一次开始的会话的信息。

  2. 如果在关闭浏览器时清除PHPSESSID有什么方法可以模拟,即使使用卷曲?

回答

7

这是一个有点不仅仅是更复杂“时,它的清除”

会话在PHP一生。默认值是24分钟。这意味着,您连接到网站后,直到

  • 你关闭浏览器(这不会与卷曲模拟,除非你刚落饼干)你的会话有效

    OR

  • 24分钟通过

每次加载一个页面,服务器调用session_start()是到期时间将被撞到的additiona l 24分钟(从技术角度来说,实际上它在调用session_start()的页面上脚本执行结束时碰撞了24分钟)。

当该cookie实际到期时,您的会话不再有效,并且$_SESSION将在服务器端为空。 但是,您的数据仍在服务器上,直到下一次服务器执行会话垃圾回收循环以清除过期会话为止,这取决于服务器上正在使用的会话处理程序,可能会或可能不会真正删除您的数据。例如,银行可能会将数据发送到存档服务器,以防他们需要记录。

+0

这么多时间编辑:) – Blacksonic 2013-02-20 13:55:25

+0

@Blacksonic是的,很常见。我倾向于快速发布,然后在我实际上再次将它们读回自己之后意识到我想改变的事情。 – 2013-02-20 13:56:16

+0

那么,这是有道理的。但有一件事:我今天使用我昨天保存的cookie文件设法访问了页面。那么,最好的方法是什么:继续重新使用我第一次获得的sessionID(并且只有在失败时请求另一个)或者每次请求一个新的sessionID? – MasterF 2013-02-20 14:17:02

3

服务器在最后一次请求之后的会话超时时间结束后删除会话。这是默认的1440秒(24分钟),它可以在php.ini文件中更改。

会话在关闭浏览器时不会刷新服务器端,客户端会丢失会话数据,因为浏览器会删除他的会话本地内存。但是如果你将sessionid保存在某个安全的地方,你可以稍后再使用它,如果你保持在超时框架内。

这正是会话劫持的工作原理,他们以某种方式获取您的sessionid,然后可以在自己的计算机上设置此sessionid并继续会话。