怎样在一个网站里转换网页之后保持登录状态?
因为小弟是从零开始接触网页编程,看过手册里Session类,不会用。望有前辈指点迷津。网站的登陆界面做出来了,用户名、密码存储到数据库中了,单纯在登陆界面可以验证用户名、密码,进入网站之后呢?怎样在进入每个网页时验证登录信息?求指点下思路,有简单代码更好。。。
登入成功後,請用 $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{
//登入失敗,顯示錯誤訊息並轉向其他頁面
}
Closer 发表于 2015-6-26 17:54
登入成功後,請用 $this->sessioin->set_userdata();
記錄你要驗證的資訊,例如這樣 :
if($login==TRUE){
谢谢。
本帖最后由 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())。
greedefoxes 发表于 2015-7-22 14:57
简单记录一下登陆的过程。 1.修改config.php 'sess_use_database'=TRUE;//使sessio ...
哦 ? 可以放在 __construct() ?
我之前想試圖放置在 __construct() 都失敗
能請教你怎麼使用的嗎 ? 本帖最后由 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-24 08:50 编辑
I still have lots more to work on greedefoxes 发表于 2015-7-23 13:46
Class MY_Controller extends CI_Controller{
function __construct()
{
那我登陆状态下 直接访问admin/login你这个还是有登录框还是需要登陆 本帖最后由 h627457796 于 2015-11-9 10:58 编辑
凌晨1点58 发表于 2015-11-8 22:29
那我登陆状态下 直接访问admin/login你这个还是有登录框还是需要登陆
你这问题没什么实用性吧,谁还会在登录以后还访问登录框页面? 但实际情况是依然会显示登录框,但你已经登录了,登录信息都保存在session中,前往其他页面显示你已登录,不用再登录一次!
页:
[1]