创建了一个简单的会话页面,即使从页面注销后我仍然可以访问登录页面。 我还销毁了所有会议但仍无法找到任何解决方案。
查看 - flashdata_home.php
<form action='add' method='post'>
<input type ='text' name='value'/>
<input type='submit' value='Enter ' />
</form>
控制器 - FlashData_Controller.php
<?php
class FlashData_Controller Extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->library('session');
$this->load->helper('url');
}
public function index(){
$this->load->view('flashdata_home');
}
public function add(){
// adding flash data
//$this->session->set_flashdata('item','This is me');
$this->session->set_userdata('Name',$this->input->post('value'));
//redirect to home page
// redirect('flashdata');
if($this->session->has_userdata('Name')){
$data = array('value' => $this->session->Name);
$this->load->view('adminflashdata_home',$data);
}
else
{
$this->load->view('flashdata_home');
}
}
public function logout(){
$this->session->unset_userdata('Name');
$this->session->sess_destroy('Name');
$this->load->view('flashdata_home');
}
}
查看 - adminflashdata_home.php
<?php
echo $value;
<li><a href="logout">Logout</a></li>
?>
答案 0 :(得分:1)
在CI中解开会话非常简单,看起来像这样。
在您的代码中,您已取消设置数据,但您必须像我一样取消设置变量。
对于单个数据:
$this->session->unset_userdata('some_name');
数据阵列:
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
用于销毁会话:
$this->session->sess_destroy();
答案 1 :(得分:0)
我认为你的问题是,虽然我们销毁会话,但我们仍然可以访问只有在用户登录时才应该加载的页面。
例如,当用户使用正确的凭据登录时,url应如下所示:localhost / app / controller / function(仅作为示例)。稍后当用户注销时,您将重定向回登录页面。但是如果我们在url中键入localhost / app / controller / function,或者如果我们在浏览器中单击后退按钮,浏览器将加载页面!我认为你陈述的问题是这样的。
对于这个问题,我总是在控制器的每个功能中使用一个解决方案。等;
class MainController extends CI_Controller {
function test {
$user_name = $this->session->userdata('user_name');
if(isset($user_name)) {
//the actual function code goes here
}
else {
//redirect to the login function
}
}
}
我希望这能帮助一些人......欢呼..