English 中文(简体)
PHP:会话死亡更改数据库
原标题:PHP: on session death change DB
  • 时间:2010-10-14 20:33:21
  •  标签:
  • php
  • session

我正在为一个项目使用PHP。我已经将会话寿命设置为0,这样当用户关闭浏览器时,会话就会终止,他/她就会注销。然而,我在DB中有一个状态变量,它存储了告诉我用户是否登录的信息。我使用它来通知其他用户特定用户的状态。

When the session dies, how can I call a function that will change the value in my DB? I have looked at overriding the session_set_save_handler(). But that requires me to override the entire function and define my own sessions. Is there a function that is called that I could use to change my DB variable?

有没有更好的方法让我实现我正在努力实现的目标?

谢谢

编辑:对于那些和我处境相同的人,我听从了尼基奇的建议。我有一个日志,记录每个用户访问的每个页面。为了检查用户是否在线,我检查我的数据库,检查是否设置了登录变量,然后仔细检查最近是否有一些活动,以了解用户是否真的在线。

问题回答

这不是一个简单的方法。通常情况下,网站会将用户的最后一个操作保存在数据库中,并表示他只有在最后N分钟内完成了一个操作。此外,如果用户手动注销,您还可以将最后一次操作时间设置为0,以考虑这一点。

PHP的会话垃圾收集器不提供任何可以触发脚本更新用户在线变量的回调机制。这将是非常好的,但它现在不在PHP中。

假设您使用的是默认的基于文件的会话处理程序,那么您可以简单地生成一个脚本,扫描会话保存目录中是否存在超过超时时间的会话文件,并在此基础上更新数据库。“如果会话文件超过30分钟,请将用户设置为在数据库中注销”。要做到这一点,您可以将用户的数据库ID存储在会话文件中,并提取该ID(会话文件只是$_session[]的serialize()d内容),或者从文件名中提取会话ID(默认情况下为sess_session_ID())并使用该ID更新数据库。

除非你有一个巨大的DB接口库要处理,否则你看不出这会是20或30行以上的代码。使用SPLDirectoryTerator,扫描文件的mtime很简单。

实际上,每次用户发出请求时,过期时间为0的会话都会终止。服务器无法知道浏览器是打开还是关闭,这就是为什么会话在X分钟后过期的原因(也是为什么我们首先有整个会话的概念)。





相关问题
why the session in iis automatically log out?

I used iis6, and when i called a function Directory.delete(), the all the session relate this website will be logged out. and i debugged the website, i found no exception. any one have ideas on this ? ...

Check session from a view in CodeIgniter

What is the best way to check session from a view in CodeIgniter, it shows no way in their user guide, otherwise I will have to make two views on everything, which is kinda weird...still a newbie to ...

Can I get the size of a Session object in bytes in c#?

Is it possible to get the size(in bytes) of a Session object after storing something such as a datatable inside it? I want to get the size of a particular Session object, such as Session["table1"], ...

提供严格分类的出席会议物体

提供严格分类的与会机会的最佳方式是什么? 我正计划转而选择矩阵,这正在促使汇编者抱怨我的幻觉方案拟订方法......

PHP Session is not destroying after user logout

I m trying to create an authentication mechanism for my PHP Application and I m having difficulty destroying the session. I ve tried unsetting the authentication token which was previously set within ...