Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

同一控制器,不同的Action,Session没有生效? #104

Open
gmplato opened this issue Jun 13, 2020 · 18 comments
Open

同一控制器,不同的Action,Session没有生效? #104

gmplato opened this issue Jun 13, 2020 · 18 comments

Comments

@gmplato
Copy link

gmplato commented Jun 13, 2020

是我对Session 用法理解错误吗?

class adminAction extends baseAction{

public function action_newcode()
{
App::$base->session->logincode = 'JH2S';
// App::$base->session->close();
}

public function action_login()
{
    echo App::$base->session->logincode;  //这里没有输出action_newcode的‘logincode‘;

    $view = $this->response->display('admin/login', $params);
    $view->title = '后台登陆界面';
    return $view;        
}

}

@billge1205
Copy link
Collaborator

你看下 /config/config.php 里的cache设置 这里可以设置session的存储媒介和过期时间 看下是否有问题

@billge1205
Copy link
Collaborator

billge1205 commented Jun 13, 2020

等等 你这边echo 之后返回页面可能被你忽略了输出 你试试直接返回看看
$this->response->correct(App::$base->session->logincode );

@gmplato
Copy link
Author

gmplato commented Jun 13, 2020

//缓存相关配置
'cache' => array(
'pkCache' => 'tb:%s',
'session' => array(
'save_handler'=>'files', //redis memcache
'maxlifetime' => 86400 //过期时间s
),
// 开启redis自动序列化存储
'serialize' => true,
),

//config没有改过

@gmplato
Copy link
Author

gmplato commented Jun 13, 2020

用$this->response->correct(App::$base->session->logincode );

页面输出:{"flag":true,"ret":null}

@billge1205
Copy link
Collaborator

你是先访问了一次 admin/newcode 是吗
要不你直接 使用$_SESSION看看呢 App::$base->session其实也就是对原生session进行了一层封装

@billge1205
Copy link
Collaborator

billge1205 commented Jun 13, 2020

@session_start();
$_SESSION['logincode'] = 'xxxx';
另外一个路由 直接输出 $_SESSION['logincode']

@billge1205
Copy link
Collaborator

如果不行的话 也可能是session相关的扩展没装或者php.ini没设置正确导致的 可以先试试

@gmplato
Copy link
Author

gmplato commented Jun 13, 2020

 现在可以输出session的值,但是我遇到的问题是,更改session的值后,要刷新请求多次页面才有改变。
 我现在在做登陆功能,生成验证码不能与session的值同步。
 public function action_login()
{
    echo App::$base->session->logtestkey;
    $view = $this->response->display('admin/login', $params);
    $view->title = '后台登陆界面';
    return $view;        
}

public function action_newcode()
{

    $validate = new Captcha(4, 120, 30);
    $validate->img();   //生成图片并输出,可正常输出
    //App::$base->session->logtestkey = '$validate->code()'; 
    App::$base->session->logtestkey = 'apple112233';   //直接用字符串调试,还是未能同步输出      
}

不知道问题出在那里了,不知道有什么解决思路。

@billge1205
Copy link
Collaborator

不好意思 漏消息了 你是不是多台服务器 session默认是存本地文件的
所以可能存在一台机器写了session,第二次请求访问了其他机器就取不到session了

@billge1205
Copy link
Collaborator

可以试试把session记在memcache或者redis中 这样多台机器就可以公用session了

@gmplato
Copy link
Author

gmplato commented Jun 17, 2020

老师,我上面提出的问题,在PHP7.0中测试没有遇到,PHP7.0正常运行。再分别在7.1、7.2、7.3.、7.4均发现是有问题的,专门分别两台服务器上测试过。请问这是一个什么问题?如何修复?

@billge1205
Copy link
Collaborator

你找到框架里 Session.php里 @session_start(); 改成 session_start();看下
感觉在7.1环境下 session有报错 而@session_start()会屏蔽掉错误所以不可见了
你看下具体的错误信息再针对的修复一下吧

@gmplato
Copy link
Author

gmplato commented Jun 18, 2020

将 @session_start();的@删除后,页面没有报错,在error.log中有大概这些警告:
WARNING => Undefined variable: _SESSION
WARNING => Undefined variable: params
WARNING => ini_set(): Headers already sent. You cannot change the session module's ini settings at this time
WARNING => session_start(): Cannot start session when headers already sent
#1 /www/wwwroot/0123456789.club/lib/data/Session.php(56)

@billge1205
Copy link
Collaborator

看起来是7.1配置里session已经启动了导致的?
你看下php.ini 里 session.auto_start 设为0吧
不知道是不是这个原因导致的 可以百度一下看看

@gmplato
Copy link
Author

gmplato commented Jun 18, 2020

PHP7.0到7.4全部session.auto_start 默认都为0了。

@billge1205
Copy link
Collaborator

还有这个问题挺奇怪的 可以把warning的错误 百度查一下 看看呢
刚查了下 意思是在执行这个session之前 已经注册过session_start 并设置过session的 ini_set导致的

@gmplato
Copy link
Author

gmplato commented Jun 18, 2020

好的,我上网找一下问题,尝试解决一下

@gmplato
Copy link
Author

gmplato commented Jun 18, 2020

老师,能力有限,处理不了,只有坐等修复了。先用着7.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants