greedefoxes 发表于 2015-6-26 17:20:58

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

    因为小弟是从零开始接触网页编程,看过手册里Session类,不会用。望有前辈指点迷津。
    网站的登陆界面做出来了,用户名、密码存储到数据库中了,单纯在登陆界面可以验证用户名、密码,进入网站之后呢?怎样在进入每个网页时验证登录信息?求指点下思路,有简单代码更好。。。

Closer 发表于 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{
    //登入失敗,顯示錯誤訊息並轉向其他頁面   

}

 

greedefoxes 发表于 2015-7-22 14:36:23

Closer 发表于 2015-6-26 17:54
登入成功後,請用 $this->sessioin->set_userdata();
記錄你要驗證的資訊,例如這樣 :
if($login==TRUE){


谢谢。

greedefoxes 发表于 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())。

Closer 发表于 2015-7-23 10:06:59

greedefoxes 发表于 2015-7-22 14:57
简单记录一下登陆的过程。                        1.修改config.php 'sess_use_database'=TRUE;//使sessio ...

哦 ? 可以放在 __construct() ?
我之前想試圖放置在 __construct() 都失敗
能請教你怎麼使用的嗎 ?

greedefoxes 发表于 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;
                }
      }
}

greedefoxes 发表于 2015-7-23 14:09:01

本帖最后由 greedefoxes 于 2015-7-24 08:50 编辑

         I still have lots more to work on

凌晨1点58 发表于 2015-11-8 22:29:30

greedefoxes 发表于 2015-7-23 13:46
Class MY_Controller extends CI_Controller{
       function __construct()
       {


那我登陆状态下 直接访问admin/login你这个还是有登录框还是需要登陆

h627457796 发表于 2015-11-9 10:54:44

本帖最后由 h627457796 于 2015-11-9 10:58 编辑

凌晨1点58 发表于 2015-11-8 22:29
那我登陆状态下 直接访问admin/login你这个还是有登录框还是需要登陆
你这问题没什么实用性吧,谁还会在登录以后还访问登录框页面? 但实际情况是依然会显示登录框,但你已经登录了,登录信息都保存在session中,前往其他页面显示你已登录,不用再登录一次!
页: [1]
查看完整版本: 怎样在一个网站里转换网页之后保持登录状态?