如何将多个会话保持在一起

时间:2010-02-03 13:42:02

标签: php session

非常感谢,抱歉打扰..我仍然是一个PHP菜鸟,我在尝试理解/找出如何让多个会话在一起工作时遇到一些问题.. 这是我现有的会议 e.g。

session_start();
// If no session exists, create one
if (!session_is_registered('lesson')) {
    $_SESSION['lesson'] = new lesson;
} 
$lesson = $_SESSION['lesson'];

然后我想从下面的代码添加新会话:

if (!isset($_POST['languageselect'])) { 
    $languageselect = $standardlanguage; 
} else { /* set standard language */
    $languageselect = $_POST['languageselect']; 
} //endif
if($languageselect == 1) {  /* My Language Pack */
    $languagearray = array (
1=>"one",
2=>"two");
} else  {   /* English Language Pack (=standard) */

    $languagearray = array (
1=>"one",
2=>"two");

function printoptionbox($boxname, $cssclass, $elementsarray, $kataktiv=1) {
    echo "<select name='$boxname' class='$cssclass'>";
    while (list($key,$value) = each($elementsarray)) {
        if ($key == $kataktiv) {    
            $SELECTED = "SELECTED";
        } else {
            $SELECTED = "";
        } //endif
        echo "<option $SELECTED value='$key'>$value</option>";
    } //endwhile
    echo "</select>";
} 

这里是来自下拉语言选项的HTML代码:

<td class="arial" width="210"><?php printoptionbox("languageselect", "languageselect", $language_array, $kataktiv=$languageselect); ?></td>                                         <input type="submit" name="languageselectsubmit" value="OK" width="30" style= "width: 30px; font-size:10px" class="submitbutton">

但我最困惑的是,如何从上面的语言代码创建会话,然后将用于另一个页面(不同的代码),因为多语言选项只适用于第一页但会重置为下一页... 非常感谢您对此的任何建议

3 个答案:

答案 0 :(得分:3)

我觉得也许我在这里并没有完全遵循你的意图,但我想提一下1)你将无法在同一时间维持两个会议2)我认为你不会真的需要无论如何。

会话可以存储稍后要检索的数组数据。如果您确定要将该数据存储在会话中,则只需添加数组并在需要时将其绘制回来。你需要做的就是编写代码,这样如果他们选择不同的语言,新的语言就会在会话中通过覆盖旧数组来换出。

您可能会发现将语言数组存储在服务器上序列化的平面文件中,然后根据用户首选项将其绘制出来更容易(我最近)。这是非常低的开销,非常快,您可以“缓存”您的语言,因此几乎不需要处理。

答案 1 :(得分:2)

我认为你误解了$ _SESSION全球背后的概念。它实际上只是一个全局关联数组,用于在不同请求之间存储值。

您执行期间输入的全局内容将被保存,直到下一个请求发生或会话超时。

所以,请考虑这个例子:

// file1.php
session_start();

$_SESSION['lesson'] = new lesson();

// file2.php
session_start();

$_SESSION['language_code'] = 1;

// file3.php
session_start();

// dumps both values we packed into the session from the previous requests
var_dump($_SESSION);

答案 2 :(得分:1)

首先,我不完全确定你完全理解会话的概念以及它如何在PHP上运行。 PHP中的会话是指所有变量(语言,课程等),而不是单个变量。所以你真正想要的不是如何保持“多会话直播”,而是如何“将多个变量存储到会话中”。

您可以将多个变量保存为单个会话,方法是将它们保存为$ _SESSION中的关键字。例如,您可以通过调用$_SESSION['lang']='en';将语言设置保存到会话。同样,您可以通过调用$_SESSION['lesson']=1;将“课程”变量添加到会话中。

我强烈建议您阅读有关PHP会话如何工作的教程。例如,请查看PHP Sessions on w3schools.com

将其提升到您的代码级别,您可以考虑以下几点:

  • 在调用printoptionbox之前,请确保通过调用 session_start(); 来初始化会话。基于您的代码示例并不完全明显。如果不调用会话启动,则无法恢复正确的变量值。
  • 确保将变量的值从printoptionbox传递给$_SESSION

作为快速测试,您可以尝试用以下方式替换您的电话:

<?php printoptionbox("languageselect", "languageselect", $language_array, $_SESSION['language']); ?>

此外:

  • 确保将用户的语言选择保存到$_SESSION

作为旁注:

  • 使用函数session_is_registered可能也会导致问题,因为它已在最新版本的PHP中弃用。此外,您可以使用isset直接替换它:
// If no session exists, create one
if ( isset($_SESSION['lesson']) ) {
   ...
}