$_SESSION接收不到值是怎么回事呀
用$_SESSION来做了一个对验证码输入是否正确的验证,但是在上一个方法里面定义了$_SESSION的值,在下面的方法里面$_SESSION的值却没有接收过来是怎么回事呀。。代码是这个样子的。求大神帮帮忙。class Houtaidenglu extends CI_Controller
{
public function index()
{
// $this->load->library('session');
//定义一个验证码方法,这里我们使用CI框架自带的验证码辅助函数
//首先载入辅助函数
$this->load->helper('captcha');
//自己定义一个总个数为4个字母数字组合的验证码
//定义一个$ku 把验证码中要用到的字母和数字赋给$ku
$ku = 'qwertyuiopasdfghjklzxcvbnm1234567890';
//定义一个$word 暂时不赋给其值
$word = '';
//运用for循环,在$ku 中随机的取出4个字符,拼成一个验证码
for($i=0;$i<1;$i++)
{
$word .= $ku;
}
//进行配置,验证码的配置项需要用一个数组来接收
$yanzhengma = array(
'word' => $word,
'img_path' => './captcha/', //定义图片存入的路径
'img_url' => base_url().'/captcha/', //定义获取图片的路径
'img_width' => 80,
'img_height' => 25,
'expiration' => 60 //定义验证码在文件夹保存的时间 以秒为单位
);
//创建验证码,把我们的配置项填入括号里,这里返回一个数组,用$ver接收
$ver = create_captcha($yanzhengma);
//判断session是否开启,如果没有开启,就使用session_start()进行开启
// $this->load->library('session');
if(!isset($_SESSION))
{
session_start();
}
$_SESSION['code'] = $ver['word'];
$data['cap'] = $ver['image'];
$this->load->view('admin/login.html',$data);
}
public function login_in()
{
$code = $this->input->post('captcha');
if(!isset($_SESSION))
{
session_start();
}
if(strtoupper($code) != $_SESSION['code'])
{
echo"验证码错误";
}
}
} 本帖最后由 wangyouworld 于 2017-9-27 10:55 编辑
1、首先确定 CI 的 session 扩展是否自动加载了。
2、确定下第37行,
if(!isset($_SESSION))
在之前var_dump($_SESSION)是什么内容?
如果是空值的话,不要使用,session_start();,因为 PHP SESSION 机制和 CI 的SESSION机制略有不同。
3、程序目录下,config/config.php 中,值是多少,
$config['sess_cookie_name'] = 'ci_session';
session_start();后,会生成一个名为,PHPSESSID的cookie,
而CI 的 session 扩展,生成的名为,$config['sess_cookie_name'] 指定的名称。
因为cookie名不同,因此,调取不到 SESSION内容。
抱歉,CI 的验证码插件没用过:$
如果上述没解决问题,建议你一步一步调试看看,看哪个地方写入了 SESSION,哪个地方读取的时候没读取到。
本帖最后由 哈喽小公主 于 2017-9-27 11:05 编辑
大神你好,我在37行之前加了 var_dump($_SESSION) 显示出来是有内容的
array(4) { ["__ci_last_regenerate"]=> int(1506480709) ["code"]=> string(1) "x" ["de"]=> string(1) "8" ["co"]=> string(1) "g" }
直接访问控制器login_in ,查看$_SESSION里面也有也有内容
Array ( => 1506480709 => x => 8 => g )
但是用表单点击登录跳转到 login_in去,就没有内容了。
Array ( => 1506481034 )
我的config/config.php 中$config['csrf_cookie_name'] = 'csrf_cookie_name';
刚学CI没多久。。 在这个问题上卡了好久了。。求大神帮帮忙 。
本帖最后由 wangyouworld 于 2017-9-27 14:25 编辑
时间戳,
2017/9/27 10:51:49
2017/9/27 10:57:14
SESSION 怎么会丢失呢?
在浏览器里,按 F12,调出调试工具,查看当前页面的 Cookie 信息,(如火狐的Firebug,有个Cookies选项卡,在里面可以看到 Cookie信息)
而Cookie名,即你定义的,$config['sess_cookie_name'] 。
你分别,在
直接访问控制器login_in,看下 Cookie 都有哪些
但是用表单点击登录跳转到 login_in去,就没有内容了。,看下 Cookie 都有哪些
留意下,跨域问题,简单的说,确定访问的地址是否相同。
你手动打开的地址,和 提交表单登录跳转的地址,域名是否相同。 直接访问控制器的Cookie是 2fob535g2cme5t06m0461l3ouvl5nbdl
在表单内点击登录的Cookie是 gs5grivnheor47gk29m171vun3hc44fo
两个不一样。。
对了大神,我可能晓得是什么原因了 当点击表单里面的登录的话,域名最前面的localhost变成了[::1],如果我把login_in前面的localhost改成[::1]的话也会报同样的错,但是这是为什么呀,localhost不是就代表[::1]的么。。而且我一点击登录就会变成[::1] ,这个要怎么改呀。。 弄好了 哈哈哈哈哈哈哈哈,谢谢大神!。 上次没注意改了hosts文件里面的东西,结果搞忘了改回来。 。。 还是不对,还是因为这个[::1]的问题,把[::1]手动改成localhost就没问题,但是点击登录按键域名自动就变成了[::1]。。 这个怎么破呀。。 本帖最后由 wangyouworld 于 2017-9-28 09:56 编辑
程序目录,config/config.php 中 $config['base_url'] = '';,项看看值是什么,保证这个值和你域名是一样的。
| 如果没有设置,那么CodeIgniter会尝试猜测协议和路径
| 你的安装,但是由于安全考虑,主机名将被设置
| 到$ _SERVER ['SERVER_ADDR']如果可用,否则为localhost。
| 自动检测机制只是为了方便起见
| 不得在生产中使用!
|
| 如果您需要允许多个域名,请记住该文件仍然存在
| 一个PHP脚本,你可以轻松地做到这一点。
另外,表单提示时,你看下,POST地址是多少,如果存在域名的话,不建议使用域名,
直接为 /Login/save 类似的地址。
恩恩,对的,确实是$config['base_url']没有设置的问题,按照大神说的去设置了就好了。谢谢啦。这次是真的解决这个问题了。 谢谢大神。嘿嘿嘿。
页:
[1]