我正在尝试构建一个记住用户与网站交互的系统,例如我的网站允许用户构建自己的导航系统,但我希望系统能够记住他们选择的导航系统而不需要用户必须注册,我认为我需要使用会话/ cookie,而且我认为我需要使用cookie,因为它们在浏览器关闭时不会过期(我知道它们会在一段时间后过期) 。
所以我已经使用codeigniter会话库进行了设置,并将会话ID保存到数据库中。我需要知道的是如何使用会话和cookie保存用户导航选项,例如,如果用户选择使用博客导航,那么我需要能够保存,以便下次他们来到网站时,博客导航是用过的。有人可以指点我正确的方向吗?请不要指向我手册。我尝试过cookie帮助程序,无论我尝试什么,cookie都不会设置。
答案 0 :(得分:3)
我知道你要求不要指出手册,但它确实会给你答案。你不应该直接与cookie交互来做你想做的事情,sessions为你处理这个问题。只要您不保存任何敏感数据,就可以将会话设置保留为默认值,这会将会话数据保存到用户计算机上的cookie中,但您需要进行小幅调整以确保延长超时时间。 / p>
首先,请先阅读:Session Class : CodeIgniter User Guide
然后你可以加载会话库:
$this->load->library("session");
并将数据保存到会话中:
$this->session->set_userdata("navigation_choice_a", "navigation_value_a");
然后使用以下方式阅读:
$this->session->userdata("navigation_choice_a");
// Will return "navigation_value_a"
您还可以将数字,类和数组保存到会话中,并在读取数据时重新构建。
最后一件事,为确保会话在两小时后不会过期,请在配置中将$config['sess_expiration']
更改为:
$config['sess_expiration'] = 0;
这将确保会话不会过期。
答案 1 :(得分:1)
要清除我们使用的会话:
$this->session->unset_userdata('navigation_choice_a');
答案 2 :(得分:0)
当客户选择导航系统时,您需要将客户导航选项保存在数据库中。
使用登录。
从数据库中提取数据。
我在控制器中提取这样的客户信息。
...
if(isset($_SESSION['customer_id'])){
$data['fname'] = $_SESSION['customer_first_name'];
$data['lname'] = $_SESSION['customer_last_name'];
$data['telephone'] = $_SESSION['phone_number'];
$data['email'] = $_SESSION['email'];
$data['address'] = $_SESSION['address'];
$data['city'] = $_SESSION['city'];
$data['pcode'] = $_SESSION['post_code'];
}
$this->load->vars($data);
$this->load->view('welcome/template');
这是我的登录控制器/登录
function login(){
// $data['loggedin']=0;
if ($this->input->post('email')){
$e = $this->input->post('email');
$pw = $this->input->post('password');
$this->MCustomers->verifyCustomer($e,$pw);
if (isset($_SESSION['customer_id'])){
// $data['loggedin']=$_SESSION['customer_id'];
$this->session->set_flashdata('msg', 'You are logged in!');
redirect('welcome/login','refresh');
}
$this->session->set_flashdata('msg', 'Sorry, your email or password is incorrect!');
redirect('welcome/login','refresh');
}
$data['main'] = 'welcome/customerlogin';// this is using views/login.php
$data['title'] = "Customer Login";
$this->load->vars($data);
$this->load->view('welcome/template');
}
退出
function logout(){
// or this would remove all the variable in the session
session_unset();
//destroy the session
session_destroy();
redirect('welcome/index','refresh');
}