hri*_*shi 11 php session codeigniter
我在PHP 5.6上使用codeigniter版本3.0.6,它工作正常.但是当我在PHP 7.1上运行相同的项目时,codeigniter会话无法正常工作.我设置如下的会话
$login_session = $this->session->set_userdata("user_session",$session_data);
Run Code Online (Sandbox Code Playgroud)
当我打印 $ login_session时, 它在PHP 7上是空白的
Sha*_*fiq 30
最近我通过将我的php版本从5.6升级到7.1来遇到同样的问题我的开发环境是使用php7.1.4的XAMPP(Apache + MariaDB)
请按照以下步骤操作:
1)转到system/libraries/Session/Session.php
2)通过添加//来注释session_start().
3)下行到312-315,它说安全为王,并注释掉以下几行:
ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
Run Code Online (Sandbox Code Playgroud)
4)然后转到你的主index.php(root index.php)
5)在顶部添加一次session_start().
这个对我有用.
pim*_*ace 11
我建议采取以下步骤:
这可以无缝地解决问题,节省您的时间以及搞乱您的应用程序的潜在风险。
PHP*_*... 10
我遵循以下步骤设法克服了这一问题。
1)前往 system/libraries/Session/Session.php
2)通过添加// 搜索session_start() 注释session_start()。
3)下至312行左右(或搜索Security is king)并注释掉所有ini_set()
ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
Run Code Online (Sandbox Code Playgroud)
4)然后转到您的主要index.php(根index.php)
5)session_start()在顶部添加。
6)在下面session_start()添加注释的以下行Session.php
ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
Run Code Online (Sandbox Code Playgroud)
而已。
小智 7
确保您已设置会话保存路径
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = APPPATH . 'cache/session/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
Run Code Online (Sandbox Code Playgroud)
设置文件夹权限0700
如果需要的话自动加载会话
$autoload['libraries'] = array('session');
Run Code Online (Sandbox Code Playgroud)
如何设置会话
$session = array('islogged' => true, 'user_id' => '1');
$this->session->set_userdata($session);
Run Code Online (Sandbox Code Playgroud)
获取用户数据一组示例
echo $this->session->userdata('user_id');
if (!$this->session->userdata('islogged')) {
redirect('logout');
}
Run Code Online (Sandbox Code Playgroud)
会话ID在php 7.1中有所不同,并且未通过正则表达式检查。
一个简单的修复方法:在system / libraries / Session / Session.php中,第133行
OR ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])
Run Code Online (Sandbox Code Playgroud)
删除“ {40} $”
OR ! preg_match('/^[0-9a-f]/', $_COOKIE[$this->_config['cookie_name']])
Run Code Online (Sandbox Code Playgroud)
问题在于,由于正则表达式不匹配,因此从cookie中删除了会话ID。因此,会话ID总是会更新。
这样可以修复正则表达式,并防止其运行“ unset($ _ COOKIE [$ this-> _ config ['cookie_name']]);”行。
这完全对我有用!
仅供参考。我自己修复后,找到它。 https://github.com/bcit-ci/CodeIgniter/issues/4830
| 归档时间: |
|
| 查看次数: |
20249 次 |
| 最近记录: |