как сохранить мультисессию вместе - PullRequest
0 голосов
/ 03 февраля 2010

Большое спасибо и извините за беспокойство .. Я все еще новичок в PHP, у меня есть несколько проблем, пытающихся понять / выяснить, как сохранить мультисессионную совместную работу ... здесь мои существующие сессии например,

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 ]

3 голосов
/ 03 февраля 2010

Я чувствую, что, может быть, я не совсем понял ваше намерение здесь, но я хочу отметить, что 1) вы не сможете поддерживать две сессии одновременно и 2) я не думаю, что вам действительно нужно в любом случае.

Сессия может хранить данные массива для последующего извлечения. Если вы уверены, что хотите сохранить эти данные в сеансе, просто добавьте ваш массив и вытяните его обратно, когда это необходимо. Что вам нужно сделать, это написать свой код, чтобы, если они выбирают другой язык, новый язык заменяется в сеансе перезаписью старого массива.

Возможно, вам будет проще (как я это сделал совсем недавно) хранить ваши языковые массивы в плоских файлах, сериализованных на сервере, а затем выводить их в зависимости от предпочтений пользователя. Это очень мало накладных расходов, очень быстро, и вы получаете возможность «кэшировать» свой язык, так что обработка практически не требуется.

2 голосов
/ 03 февраля 2010

Я думаю, вы неправильно поняли концепцию $ _SESSION global.Это действительно просто глобальный ассоциативный массив, который используется для хранения значений между различными запросами.

Все, что вы поместили в глобальный объект во время выполнения, будет сохранено до следующего запроса или до истечения времени ожидания сеанса.

Итак, рассмотрим этот пример:

// 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);
1 голос
/ 03 февраля 2010

Прежде всего, я не совсем уверен, что вы полностью понимаете концепцию сессии и то, как она работает на PHP. Сессия в PHP относится ко всем переменным (язык, урок и т. Д.), А не к отдельным переменным. Итак, что вы действительно ищете, это не как сохранить «многосессионный режим», а как «сохранить несколько переменных в сеансе».

Вы можете сохранить несколько переменных в одном сеансе, сохранив их как ключевые слова внутри $ _SESSION. Например, вы можете сохранить настройку языка в сеансе, вызвав $_SESSION['lang']='en';. Точно так же вы можете добавить переменную "урок" в сеанс, вызвав $_SESSION['lesson']=1;.

Я бы настоятельно рекомендовал прочитать учебник о том, как работают сессии PHP. Например, взгляните на Сессии PHP на 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']) ) {
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...