繁体   English   中英

Code Igniter-登录后如何重定向用户?

[英]Code Igniter - how to redirect user after login?

我有一个使用数据库支持的会话的Code Igniter项目。 该Web应用程序受密码保护,这意味着我有一个抽象控制器来检查用户是否登录,然后再允许他查看除登录表单之外的任何页面。

尽管实现这一点没有问题,但我在理解如何使应用程序将用户重定向到他想查看是否需要首先登录的页面时遇到了一些困难。

进行方式:用户已注销并输入URL。 该应用程序检测到他尚未登录,因此将他发送到登录页面并在ci_session表中创建一行。 同时,我使用flashdata或userdata存储用户在会话对象中输入的URL。 我的问题是,一旦用户登录,应用程序将在数据库中创建一个新行,这意味着一个新会话,而完全忽略了我之前存储的值。

每个会话不应该排成一行吗?

CI URL Helper具有可以使用的重定向功能。 http://codeigniter.com/user_guide/helpers/url_helper.html

是否将“标头重定向”到指定的本地URI。 就像该帮助器中的其他功能一样,该功能旨在重定向到您网站中的本地URL。 您将不会指定完整的站点URL,而只是指定要定向到的控制器的URI段。 该函数将根据您的配置文件值构建URL。

可选的第二个参数允许您在“位置”方法(默认)或“刷新”方法之间进行选择。 位置更快,但在Windows服务器上有时可能会出现问题。 可选的第三个参数允许您发送特定的HTTP响应代码-例如,可以将其用于创建301重定向以用于搜索引擎。 默认响应代码为302。第三个参数仅在“位置”重定向中可用,而在“刷新”中不可用。 例子:

if ($logged_in == FALSE)
{
     redirect('/login/form/', 'refresh');
}

// with 301 redirect
redirect('/article/13', 'location', 301);

我认为您误会了会话在浏览器和Web应用程序之间的工作方式。 当用户打开您的登录页面时,将为他们分配一个唯一的会话ID,codeigniter会对其进行跟踪。 除非您的会话过期(通过注销强制退出或由于您自己的会话过期设置),否则codeigniter仅应在数据库中的每个唯一会话写入1行。 确保将config.php中的sess_expiration变量设置为实际值。

我看不出如何从Cookie名称中删除下划线可以解决此问题,因为该名称与会话的一般工作方式无关。

您可以使用类似这样的东西。

当用户尝试访问类似的页面时

http://test.com/userpage.php

如果他未登录,请将其重定向到

http://test.com/login.php?redirectpage=userpage.php

(此重定向将在检查cookie或会话的登录状态后由userpage.php完成。)

登录页面的值为“ redirectpage”,一旦用户在登录页面上登录,就将其重定向到他先前尝试访问的页面。

您将必须在需要用户登录的所有页面中检查用户登录状态。

解决了。

我的问题不是如何重定向或如何存储数据。 我的问题是应用程序为每个请求创建两个会话。

我将Cookie的名称更改为不包含下划线和“瞧”的固定名称。 每个请求一个会话,一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM