我在Codeigniter 3.1.4
中有一个项目,突然间它没有在其他页面上加载会话变量。我配置为在autoload.php
中自动加载库,但没有工作,我将CI升级到3.1.5
但是也没有工作。
我也使用原生会话,但没有成功。
我开始了一个新项目,只有一个控制器用于测试,但没有工作。
测试控制器的代码如下:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Home extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->session->set_userdata('test', 'test1');
echo $_SESSION['test'] . '<br>';
echo anchor('home/test', 'Validate');
}
public function test() {
echo '<pre>';
print_r($_SESSION);
}
}
这是我对Session和Cookie的config.php设置:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
$config['cookie_secure'] = FALSE;
$config['cookie_httponly'] = FALSE;
我尝试将会话驱动程序作为数据库,但仍然存在同样的问题。
答案 0 :(得分:1)
如果自动加载不起作用,请将您的会话库加载到控制器中:
class Home extends CI_Controller {
public function __construct(){
parent::__construct();
$this->library->load('session');
}
public function index() {
$this->session->set_userdata('test', 'test1');
}
public function test() {
echo '<pre>';
print_r($this->session->all_userdata()); //this will print the whole session array
print_r($this->session->userdata('test'));//this will print only session test variable
}
}
答案 1 :(得分:0)
将codeignitor会话库加载到application / config / autoload.php文件
autoload.php文件
$autoload['libraries'] = array('session');
home.php文件 [控制器]
class Home extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->session->set_userdata('test', 'test1');
}
public function test() {
echo '<pre>';
print_r($this->session->userdata('test'));
}
}
有关详细信息,请按照此link
进行操作答案 2 :(得分:0)
Load the the codeignitor session library to application/config/autoload.php file
$autoload['libraries'] = array('session');
public function login()
{
$email=base64_encode(ucfirst(trim($this->input->post('loginid'))));
$pass=md5(trim($this->input->post('pass')));
$result=$this->db->query("SELECT * from table name where email='$email' and password='$pass);
if($result -> num_rows() == 1)
{
$result = $result->result();
$emp_id = $result[0]->emp_id; //fetching value from the table
$first_name = $result[0]->first_name; //fetching value from the table
$roleid=$result[0]->roleid; //fetching value from the table
$email=$result[0]->email; //fetching value from the table
$admin_data = array(
'admin_id' => $emp_id, //assigning value
'admin_name' => $first_name, //assigning value
'admin_type'=>$roleid, //assigning value
'admin_email'=>$email //assigning value
);
$this->session->set_userdata($admin_data); // Setting session value
var_dump($admin_data);
or
print_r($admin_data)
}
答案 3 :(得分:0)
使用$config['sess_driver'] = 'files'
时,必须将$config['sess_save_path']
设置为会话文件文件夹的绝对路径。会话文件驱动程序文档HERE。
您可能需要创建自己的目录并为其设置权限。您应该在Web服务器的“公共”文件夹之外创建它。在WAMP安装中,公用文件夹的路径可能如下C:\wamp\www\htdocs\
,而Codeigniter的index.php
位于该文件夹中。
在基于Linux的Apache系统上,公用文件夹的路径可能是/var/www/htdocs/
。
您需要在与htdocs
相同的级别创建会话文件夹。换句话说,/var/www/sessions/
或C:\wamp\www\sessions\
。必须正确设置权限!!!
CodeIgniter定义一个常量 - FCPATH
- 这是主index.php
文件的路径。您可以使用它来构建会话文件夹的绝对路径。
$config['sess_save_path'] = substr(FCPATH, 0, strpos(FCPATH, 'htdocs/'))."sessions/");
以上假设htdocs
位于index.php
所在的位置。调整上面的代码以匹配您的文件夹结构。假设FCPATH是“/ var / www / htdocs /”,那么substr(...)
将返回“/ var / www / sessions /”