session失效
本人刚接触ci,试着动手写个登陆验证功能,但一直不成功,以下是代码,望高手指教!!!captcha.php
<?php if( ! defined('BASEPATH')) exit('No direct script access allowed');
class Captcha extends CI_Controller {
public function index()
{
$out_datas=$this->_captcha();
$this->load->view('login',$out_datas);
}
private function _captcha(){
$this->load->helper("mycaptcha");//加载验证码
$vals = array(
'img_path' => './captcha/', //验证码图片存放的地址
'img_url'=> base_url()."captcha/",//图片访问的路径
'img_width' => '60', //图片的宽度
'img_height' => '20', //高度
'expiration' => 1, //存放时间,1分钟
'word_length'=> 4 //显示几位验证数字
);
$cap = create_captcha($vals);
$out_datas["v_img"]=$cap["image"]; //生成的图片文件
$out_datas["v_word"]=$cap["word"];
$arr=array("v_word"=>$cap["word"]);
$this->session->set_userdata($arr); //生成的验证码,也可放入session中管理
return $out_datas;
}
function checklogin()
{
$this->load->model("test_m");
if($_POST["submit"])
{
$this->load->library('form_validation'); // 使用CI的表单验证, 如下:
$this->form_validation->set_rules('user', 'User', 'min_length|max_length|required');
$this->form_validation->set_rules('password', 'Password', 'min_length|max_length|required');
$this->form_validation->set_rules('rand', '验证码', 'required');
if($this->form_validation->run() !== false)
{
$user=$this->test_m->user_select($_POST["user"]);
if($user)
{
if($user->upass==$_POST["password"])
{
if($_POST["rand"]==$this->session->userdata('v_word'))
{
$arr=array("uid"=>$user->uid);
$this->session->set_userdata($arr);
echo"登陆成功!";
$this->load->view('loginsuccess');
}
else
{
echo "验证码有误!";
$data=$this->_captcha();
$this->load->view('login',$data);
}
}
else
{
echo"密码错误!";
$data=$this->_captcha();
$this->load->view('login',$data);
}
}
else
{
echo "用户不存在!";
$data=$this->_captcha();
$this->load->view('login',$data);
}
}
else
{
$data=$this->_captcha();
$this->load->view('login.php',$data);
}
}
else
{
echo"没有登陆!";
$data=$this->_captcha();
$this->load->view('login.php',$data);
}
}
function checksession()
{
$this->load->library("session");
if($this->session->userdata('uid'))
echo "已登录!";
else
echo "没有登陆!";
}
function loginout()
{
$this->load->library("session");
$this->session->unset_userdata('uid');
}
};
#在 'img_path' => './captcha/',我们将生成的图片存放在 项目/captcha目录下,所以我们要在application的同级目录中创建captcha目录,用来存放验证码图片applicationcaptcha --在application 的同级目录创建文件system
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
login.php
<?php echo form_open('captcha/checklogin');?> <p>
<?php
echo form_label('User: ', 'user');
echo form_input('user','', 'id="text"');
?>
</p>
<p>
<?php
echo form_label('Password: ', 'password');
echo form_input('password', '', 'id="password"');
?>
</p>
<p>
<?php
echo form_label('验证码: ', 'rand');
echo form_input('rand','', 'id="text"');
echo $v_img;
?>
</p>
<p>
<?php echo form_submit('submit','Login');?>
</p>
<?php echo form_close();?>
<div class="errors"><?php echo validation_errors();?></div>
我写的后台验证没有用到ci的form,刚开始也是用到ci的session 但是用段时间之后发现了问题,,就是用ajax提交分页的时候 老是提示我失效(cookie过期) 后来就选择了用原生的session来弄,cookie也是用原生的setcookie函数来弄的
附上我的代码 希望对你有帮助。。
//function 处理登录页面
function do_login(){
$post_data = $this->input->post(NULL,true) ;
$username =$this->admin_common->do_addslashes($post_data['username']);
$passwd = $this->admin_common->do_addslashes($post_data['passwd']);
if(empty($username)){
showmessage('用户名错误请正确输入','admin/login/show_login',3,0) ;
}elseif(empty($passwd)){
showmessage('请输入正确的密码,密码不可以为空','admin/login/show_login',3,0) ;
}
if(!$this->config->item('is_need_passwd') && $username == $this->config->item('web_admin_master')){
//后台密码忘记
@ob_clean() ;
@session_start() ;
$_SESSION['username'] = $this->config->item('web_admin_master');
$_SESSION['client_ip'] = $this->admin_common->get_client_ip() ;
header("Location:".site_url('admin/index/frame'));
}else{
$passwd =md5($post_data['passwd']);
$sql ="SELECT * FROM common_member where username='{$username}' and passwd='{$passwd}' AND allowadmin='1' AND status = '1'";
$result = $this->M_login->query_one($sql);
if(empty($result)){
showmessage('用户名或者密码错误,或者你没有后台的权限进行登录,请仔细的检查','admin/login/show_login',3,0) ;
}else{
//把当前用户的权限查询出来
$sql_user = "SELECT `groupid` FROM `common_member`WHERE username='{$result['username']}'" ;//查询group id
$one_res = $this->M_members->query_one($sql_user);
$duty_id = intval($one_res['groupid']);
//查询group name
$sql_group_name = "SELECT `duty_name` FROM `common_duty` WHERE `duty_id` = '{$duty_id}'" ;
$one_res_group = $this->M_team->query_one($sql_group_name);
if(isset($one_res_group['duty_name']) && $one_res_group['duty_name'] != ""){
$group_name = $one_res_group['duty_name'];
}
$group_name = '' ;
$sql_user_permition = "SELECT `duty_perm` FROM `common_duty_perm` WHERE `duty_id` = '{$duty_id}'" ;
$one_res_perm = $this->M_duty_perm->querylist($sql_user_permition);
if($one_res_perm){
$one_res_perm =$this->admin_common->arrayChange($this->admin_common->object_to_array($one_res_perm)); //用户特有的权限
}
$one_res_perm = serialize($one_res_perm);
setcookie($this->config->item('cookie_prefix').'permition',$one_res_perm,time()+$this->config->item('cookie_expire'),$this->config->item('cookie_path'),$this->config->item('cookie_domain'),$this->config->item('cookie_secure')) ;
@ob_clean() ;
@session_start() ;
$_SESSION['username'] = $result['username'];
$_SESSION['client_ip'] = $this->admin_common->get_client_ip() ;
$_SESSION['group_name'] = $group_name ;
@header("Location:".site_url('admin/index/frame'));
}
}
}
后台验证是否登录成功 用的ci钩子
<?php
if (! defined('BASEPATH')) {
exit('Access Denied');
}
/*
*check admin is login
*author wangjian
@验证用户是否登录了
*/
class check_authority{
private $CI;
public function __construct() {
$this->CI = &get_instance(); //初始化 为了用方法
}
function auth(){
$this->CI->load->library('admin_common');//加载admin的公用方法
$username =$this->CI->admin_common->login_name();
if(preg_match("/admin(.*)/iUs", uri_string())){
//如果url地址里面包含了admin
if(!preg_match("/admin\/login\/(.*)/iUs", uri_string())){
if(empty($username) || $username == ""){
showmessage("密码已经过期",'admin/login/show_login',3,0);
}
}
}
}
}
页:
[1]