2011-12-13 115 views
0

我创建了一个简单的登录系统,我使用CI Sessions来保存一些值。
但CI会话没有按预期工作,它没有检索任何值。
我试图跟踪这个问题,我想出了一些东西:
每当我刷新页面,一个新的会话创建!
而且只有一个会话保存我的自定义变量(is_logged,username)。
其他会话只是保存默认数据。
我试图在数据库中保留会话,仍然是同样的问题。
它是我的加密密钥吗?
我只用了一堆随机字母,因为我无法保持空白。
这是我测试我的会话的控制器。
说明:
我在这里使用了一些echo,只是为了测试。
注2:
只有当我在同一页面上调用会话变量时,才可以检索会话变量。为什么每当我刷新页面时,都会创建新的CI会话?

<?php 

class site extends CI_Controller { 

    function index() { 
     if (!$this->session->userdata('is_logged')) { 
      $data['main_content'] = 'site_view'; 
      $this->load->view('template/all_templates', $data); 
     } else { 
      echo 'you\'re logged already'; 
     } 
    } 

    function login() { 
     if (!$this->session->userdata('is_logged')) { 
      $username = $this->input->post('username'); 
      $password = $this->input->post('password'); 
      if ($username && $password) { 
       if ($this->site_model->validate($username, $password)) { 
        $user_data = array('username' => $username, 'is_logged' => TRUE); 
        $this->session->set_userdata($user_data); 
        echo 'you successfully log in.'; 
        redirect('site/index', 'refresh'); 
       } else { 
        echo 'cannot login'; 
       } 
      } else { 
       echo 'username and/or password not set'; 
      } 
     } else { 
      echo 'you\'re logged in already!'; 
     } 
    } 
} 
?> 

注:
这个问题是与此相关的一个

EDIT1:
我登录几次,有时有没有错误。
几刷新/日志插件后,看到sesssion数据库:

02d6e3521046ffe7df36b07e88624a60 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803371 
66a9cf3d6b7e0521dcc7e5bd3d5d4ad1 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803380 
923a78db029ee3e3ae4bf9e09873fcae 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803366 a:3:{s:9:"user_data";s:0:"";s:8:"username";s:4:"aziz";s:9:"is_logged";b:1;} 
99ac075792b7818aadac60d00ca46947 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803367 
bbe10f3338226c8d83b0ae58d1ca5149 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803343 a:3:{s:9:"user_data";s:0:"";s:8:"username";s:4:"aziz";s:9:"is_logged";b:1;} 
ed6a22ae1d2fd21b6ef66668c2078a11 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803375 
feb5806176dc8a4f7ed8f30763f65f8b 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803380 a:3:{s:9:"user_data";s:0:"";s:8:"username";s:4:"aziz";s:9:"is_logged";b:1;} 

正如你可能会注意到,一些结果与用户数据。

我的验证功能:

function validate($username, $password) { 

    $this->db->where('username', $username); 
    $this->db->where('password', $password); 
    $query = $this->db->get('users'); 
    if ($query->num_rows() == 1) { 
     return true; 
    } else { 
     return false; 
    } 
} 

注:
我测试了在FF &铬。

+0

在IE上测试,也许? – 2011-12-13 18:53:15

回答

0

阿齐兹在几个月前,我遭遇了很多麻烦与原来的CI会议库(包括你提到的)。最后我到达这个替换使用native PHP session。有用!
相信我,在一个项目中间,我并没有停下来想知道为什么。只是工作。

这就是:Codeigniter's Native session(有在底部的下载链接)

,但由于它是你必须做一些黑客的老图书馆。您可以在library's forum

中检查这些简单的黑客,只需将此文件放在codeigniter的库目录中即可。让我们来谈谈后向兼容性,我的意思是! :)

+0

谢谢!它的工作,但我仍然有一个问题,它不会将它们保存在数据库中,任何建议? – 2011-12-14 10:58:17

0

试试这个:

function index() 
{ 
    if(!$this->session->userdata('is_logged')) 
    { 
    $data['main_content'] = 'site_view'; 
    $this->load->view('template/all_templates', $data); 
    } 
    else 
    { 
    echo 'you\'re logged already'; 
    } 
} 

function login() 
{ 
    if(!$this->session->userdata('is_logged')) 
    { 
    $username = $this->input->post('username'); 
    $password = $this->input->post('password'); 
    if($username && $password) 
    { 
     if($this->site_model->validate($username,$password)) 
     { 
     $user_data = array('username' => $username,'is_logged' => TRUE); 
     $this->session->set_userdata($userdata); 
     echo 'you successfully log in.'; 
     //redirect('somewhere','refresh'); 
     } 
     else 
     { 
     echo 'cannot login'; 
     } 
    } 
    else 
    { 
     echo 'username and/or password not set'; 
    } 
    } 
    else 
    { 
    echo 'you\'re logged in already!'; 
    } 
} 

注:

  1. 你需要有会话库和site_model加载;
  2. 设置后您不能直接调用会话,因为它只会在后续请求中可用; CI的会话实际上是cookies。
  3. echo这儿只是为了演示流,你应该改变他们的观点或重定向或somethig其他
+0

我尝试了你的新代码,仍然是同样的问题。我修改我的问题,我添加数据库行,并验证功能代码 – 2011-12-13 19:19:42

相关问题