我的代码示例:
class SiteController extends Controller {
/**
* This is the default 'index' action that is invoked
* when an action is not explicitly requested by users.
*/
public function actionIndex() {
$_SESSION['test'] = 'testdata';
var_dump($_SESSION); exit;
}
第二个请求的示例:
class SiteController extends Controller {
/**
* This is the default 'index' action that is invoked
* when an action is not explicitly requested by users.
*/
public function actionIndex() {
var_dump($_SESSION);exit;
}
我在yii有一个项目。项目不是我的 - 我只是想修复错误。
我的问题是: 首先var_dump()显示$ _SESSION变量带有“testdata”的“test”索引。在第二个请求,虽然我得到一个$ _SESSION变量的空数组。意思是,每个请求会话都被清除。我已经检查过 - 会话ID保持不变。我还检查了这个项目配置 - 我找不到任何扩展SESSION组件和改变它的行为的引用。此外,当登录yii时,将状态保存到SESSION,但由于在重定向后清除了SESSION,登录失败。也就是说基于COOKIE的身份验证可以证明问题的根源。
非常感谢帮助。
更新
我把它缩小了。这是FRONT YII FRONT CONTROLLER(index.php)的代码:
<?php
@session_start(); // this line is at cwebuser.php at init() method and it is called at every request. should work properly.
var_dump($_SESSION);
$_SESSION['test'] = 'asdasd';
var_dump($_SESSION);exit;
它仍会在第二个REQUEST上打印空的$ _SESSION。所以问题可能不在于框架。
答案 0 :(得分:0)
在protected / components / controller.php下有一个名为controller.php的文件,它会在调用任何动作之前被调用。你可以检查那个文件并看看......是否有任何注销函数被调用...
//It clears all the sesstion data... or any php way
Yii::app()->user->logout();
是的,如果你在moule,那么你也可以检查模块directopry下的ModuleName.php ...如果有任何会话清除脚本......
清除会话......是的,这不是在Yii中使用会话的正确方法是的,它是PHP但YII ....你可以使用以下sytax dfor会话..
//to set a session variable mnamed test
Yii::app()->user->setState('test',$test);
//to get a session variable named tets
Yii::app()->user->getState('test');
答案 1 :(得分:0)
您可以在/protected/config/main.php
中设置会话详细信息(除非您在index.html中对其进行了更改,否则这是默认设置)
'session' => array(
'autostart' => true,
'timeout' => 1440, // time in seconds
),
上的会话
答案 2 :(得分:0)
我的问题是我通过服务器IP:123.123.123.123/site/index访问了我的网站,这与访问和保存会话有冲突。虽然我不知道细节。如果有人对这些东西有所了解,我很乐意接受他(她)的回答是正确的。