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

[HELP] 怎样在一个网站里转换网页之后保持登录状态?

[复制链接]
发表于 2015-6-26 17:20:58 | 显示全部楼层 |阅读模式
    因为小弟是从零开始接触网页编程,看过手册里Session类,不会用。望有前辈指点迷津。
    网站的登陆界面做出来了,用户名、密码存储到数据库中了,单纯在登陆界面可以验证用户名、密码,进入网站之后呢?怎样在进入每个网页时验证登录信息?求指点下思路,有简单代码更好。。。
发表于 2015-6-26 17:54:25 | 显示全部楼层
登入成功後,請用 $this->sessioin->set_userdata();
記錄你要驗證的資訊,例如這樣 :
if($login==TRUE){
    $this->sessioin->set_userdata('login', 'ok');
}

然後在另一個網頁,檢查是否有登入,就去取這個 Session
$check_login = $this->session->userdata('login');
if(isset($check_login) && $check_login=='ok'){
    //成功登入,並顯示該頁面的資訊

}else{
    //登入失敗,顯示錯誤訊息並轉向其他頁面   

}


 
 楼主| 发表于 2015-7-22 14:36:23 | 显示全部楼层
Closer 发表于 2015-6-26 17:54
登入成功後,請用 $this->sessioin->set_userdata();
記錄你要驗證的資訊,例如這樣 :
if($login==TRUE){

谢谢。
 楼主| 发表于 2015-7-22 14:57:34 | 显示全部楼层
本帖最后由 greedefoxes 于 2015-7-22 15:31 编辑

简单记录一下登陆的过程。                        1.修改config.php 'sess_use_database'=TRUE;//使session保存在数据库中。
    2.自动加载autoload.php文件中加入session类。
    3.在数据库中创建ci_sessions表,包含session_id,ip_address等字段。(代码参见CI手册session类->将session数据存入数据库。)
    4.模型文件model中写一个验证密码正确的函数,返回  正确返回包含用户名,密码的变量 $r,错误返回FALSE。
    5.登陆控制器,登陆函数login()中,如果验证密码通过,添加一个自定义session变量, $this->session->set_userdata("sess_user",$r),将用户名和密码等信息写入。
    6.主控制器My_Controller中, __construct()中加入自定义函数checklogin,checklogin方法包含两层,先检测当前访问界面是否为登陆或者退出(用到$this->uri->rsegment()函数),如果是,返回TRUE;如果不是,if($this->session->userdata('sess_user'))可以取出目标session数据,返回TRUE,以上都不是,返回FALSE。__construct()中checklogin如果返回FALSE,则跳转到登陆界面;如果返回TRUE,则可以运行加载视图函数,打开目标页面。
    7.退出时销毁session,($this->session->sess_destroy())。

评分

参与人数 1威望 +2 收起 理由
Closer + 2 赞一个!

查看全部评分

发表于 2015-7-23 10:06:59 | 显示全部楼层
greedefoxes 发表于 2015-7-22 14:57
简单记录一下登陆的过程。                        1.修改config.php 'sess_use_database'=TRUE;//使sessio ...

哦 ? 可以放在 __construct() ?
我之前想試圖放置在 __construct() 都失敗
能請教你怎麼使用的嗎 ?
 楼主| 发表于 2015-7-23 13:46:54 | 显示全部楼层
本帖最后由 greedefoxes 于 2015-7-23 13:50 编辑
Closer 发表于 2015-7-23 10:06
哦 ? 可以放在 __construct() ?
我之前想試圖放置在 __construct() 都失敗
能請教你怎麼使用的嗎 ? ...

Class MY_Controller extends CI_Controller{
       function __construct()
       {
                parent::__construct();
                $this->load->helper('url');
                if(!$this->checkLogin())/*验证不通过返回false,跳到登陆界面*/
                        redirect("/admin/login");
                $this->load->library('session');
        }
       function checkLogin()
      {
                if($this->uri->rsegment(1)=='admin'&&in_array($this->uri->rsegment(2),array('login','logout')))
                        return true;
                else{
                        if($this->session->userdata('sess_user'))
                                return true;
                        else
                                return false;
                }
        }
}

 楼主| 发表于 2015-7-23 14:09:01 | 显示全部楼层
本帖最后由 greedefoxes 于 2015-7-24 08:50 编辑

         I still have lots more to work on
发表于 2015-11-8 22:29:30 | 显示全部楼层
greedefoxes 发表于 2015-7-23 13:46
Class MY_Controller extends CI_Controller{
       function __construct()
       {

那我登陆状态下 直接访问admin/login你这个还是有登录框  还是需要登陆
发表于 2015-11-9 10:54:44 | 显示全部楼层
本帖最后由 h627457796 于 2015-11-9 10:58 编辑
凌晨1点58 发表于 2015-11-8 22:29
那我登陆状态下 直接访问admin/login你这个还是有登录框  还是需要登陆

你这问题没什么实用性吧,谁还会在登录以后还访问登录框页面? 但实际情况是依然会显示登录框,但你已经登录了,登录信息都保存在session中,前往其他页面显示你已登录,不用再登录一次!

本版积分规则