3

我正在为我的应用程序使用 Recess Framework,并且对会话处理感到困扰。我需要在会话中存储一些值。我能够创建会话和会话 ID。但是一旦我导航到另一个页面,我就无法将它们取回!!你们如何管理您的会议?PHP会话处理简单直接..但我根本无法做到这一点!

在我的家庭控制器中,我有:

/* !Route GET, / */
function index() {
   .
   .
   session_start();
   $_SESSION['val'] = 'SomeValue';
   .
   .
}

我的视图显示另一个表单,当用户提交时,我还需要访问会话 val .. 所以我尝试将值取回:

/* !Route GET, /check */
function check() {
    if(isset($_SESSION['val'])){
       .
       .
       .
    }       
}

但不幸的是,我没有输入 if 块 .. 我无法看到我的错误是我尝试显示会话正在使用 session_id() 以及它在 check() 方法中的空白值。

我还注意到,每次创建新会话时,session_id 都是一样的!!在 PHP 中是这样的吗?据我所知,它们应该是不同的!

4

2 回答 2

1

在 Recess 框架的论坛上与其他社区成员进行了多次尝试和讨论之后,这是我如何让它工作的:

我将session_start()放在了recess-conf.php中,现在一切似乎都正常!

于 2011-02-12T05:56:49.490 回答
0

在我看来,最好使用一个函数来启动这样的会话:

http://snipplr.com/view/41338/start-a-secure-session/

function startSession($session_name) {
    session_name($session_name);
    $ok = @session_start();
    if(!$ok){
       session_regenerate_id(true); // replace the Session ID
       session_start(); // restart the session (since previous start failed)
    }
}

在您的示例中,第二次执行 session_start(); 是必须的。

/* !Route GET, /check */
function check() {
    session_start();
    if(isset($_SESSION['val'])){
       .
       .
       .
    }       
}

或者对于我的例子

function startSession($session_name) {
    session_name($session_name);
    $ok = @session_start();
    if(!$ok){
       session_regenerate_id(true); // replace the Session ID
       session_start(); // restart the session (since previous start failed)
    }
}

/* !Route GET, / */
function index() {
   .
   .
   startSession('SID'); // SID is only for example you can use what you want
   .
   .
   $_SESSION['val'] = 'SomeValue';
   .
   .
}


/* !Route GET, /check */
function check() {
       .
       .
       .
    startSession('SID'); // SID is only for example you can use what you want
       .
       .
       .
    if(isset($_SESSION['val'])){
       .
       .
       .
    }       
}
于 2011-02-09T12:46:46.867 回答