处理过期的会话

时间:2012-02-17 06:27:19

标签: php codeigniter session

我的控制器中有很多功能看起来像这样。当会话用完并且调用类似函数时,使用CI的最佳措施是什么?

$this->foo_model->create_bar($this->session->userdata('userid'), $bookId);

2 个答案:

答案 0 :(得分:3)

我可能不会完全回答您的问题,但是当您为过期的会话致电$this->session->userdata('something')时,它只会返回FALSE

那么,最好的方法是检查变量是否为FALSE?正如您对任何其他可能不是您想要的值的变量所做的那样:

if($this->session->userdata('userid')){}
//or check it into the model's method, wherever you prefer

何时何地这样做很大程度上取决于您的设计。如果您总是需要进行相同的检查,您可能希望将其作为库或模型的函数,这样您只需编写一次代码并调用该方法即可。如果您需要在其他任何事情之前完成,您可以考虑将其放置在构造函数中,或者如@Jordan Arsenault建议的那样,创建一个用于检查的父MY_Controller,并且所有常规控制器都会扩展它。真的,这取决于你的架构,你没有提供足够的信息来回答这个问题。

我只能说你的方法是容错的,在提供剩下的代码之前总是检查正确的值(如果过期的会话中断你的工作流程)

答案 1 :(得分:0)

您可以使用cookie来恢复过期的会话。例如,您可以在用户登录到您的应用程序时为其创建令牌。此令牌具有您的应用程序全局知道的相关用户ID,然后在包含的用户计算机上保存cookie token.each会话到期的时间请求客户端cookie并查看此cookie是否可用,然后使用其userid重新创建session.if没有可用的令牌将用户重定向到一个页面,告诉他发生了什么并要求他再次登录。 当用户注销时删除令牌和cookie