用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5837|回复: 10
收起左侧

控制器类的问题

[复制链接]
发表于 2008-9-22 15:29:30 | 显示全部楼层 |阅读模式
大家好,有个问题想请教一下:
我有一个控制器文件blog_one.php,默认是指向他的。现在我又加了个blog_two.php文件。但我的登录验证是在blog_one的类里面,如果用户直接输入blog_two的地址,就可以绕过登录验证,请问大家有没有什么好的办法。当然,在blog_two也加上登录验证肯定是可行的,但还有没有更好的办法呢?
发表于 2008-9-22 17:24:49 | 显示全部楼层
登录验证只在一个地方做,放在登录模块(这个模块可以是控制器,也可以是控制器函数)中,其他地方采用如SESSION来进行用户认证。你需要做的是把你的用户认证个业务逻辑进行分离出来,其他地方需要用户认证的时候,用如SESSION来进行控制即可。

如果有很多文件都需要进行用户认证,可以对控制器类进行继承,然后在控制器类里面进行用户认证,其他需要进行认证的控制器从它继承即可。
发表于 2008-9-22 17:57:39 | 显示全部楼层
支持自己继承控制器这个方法。

一般来说,就是判断 session,如果未登录,就要 redirect 一下。
发表于 2008-9-22 20:26:01 | 显示全部楼层
把 session 检测部分的代码 独立出来 然后封装到model里面 需要验证身份的 控制器中

只需要 load该模型 调用相关方法即可
发表于 2008-9-22 20:39:01 | 显示全部楼层
模型是专门用来和数据库打交道的。最好不要用Model来干这个,放在控制器中实现比较合理。
 楼主| 发表于 2008-9-22 21:23:02 | 显示全部楼层
谢谢!
也就说在每个控制器类里面都要加上检查session的函数,这样的话是否有点重复呢,每个类里面都有这么一个is_login()的函数来检查session,而代码完全一样.如果继承blog_one控制器类,这个可能将程序的耦合度提高了,而且我根本不需要blog_one继承下来的其他方法.
能否有更好一点的办法?
请各位不吝赐教!
发表于 2008-9-22 21:27:47 | 显示全部楼层
对Controller控制器进行继承,如My_Controller,这个控制器只做一件事情,就是对SESSION数据进行验证;
blog下面的两个或者多个需要用户认证的控制器都从My_Controller继承即可。
 楼主| 发表于 2008-9-22 21:39:17 | 显示全部楼层
谢谢lemon!
我明白了!应该blog_one,blog_two.....都从mycontroler继承,这样组织就很合理了,
再次谢谢
发表于 2008-9-22 23:49:29 | 显示全部楼层
更好的办法就是采用称为 filter 的 hook 方法,这个在官网讨论很火热。
发表于 2008-9-23 11:47:36 | 显示全部楼层
有时间斑竹秀一个DEMO上来,:)

本版积分规则