За последние 24 часа нас посетили 50928 программистов и 1800 роботов. Сейчас ищут 865 программистов ...

Сохраняю в сессии... но хранит не долго и выводит не везде..

Тема в разделе "PHP для новичков", создана пользователем stakanych, 28 апр 2009.

  1. stakanych

    stakanych Активный пользователь

    С нами с:
    27 янв 2009
    Сообщения:
    62
    Симпатии:
    0
    Сохраняю данные в сесси вот таким образом:

    PHP:
    1.  
    2. <?php
    3. include_once 'Session.php';
    4. Session::start();
    5.  
    6. $v = $_POST['v'];
    7. ?>
    8. <body>
    9. <form action="6.php" method="POST">
    10. <input name="v" type="text" value="<?php echo $v;?>">
    11. <input name="t" type="text" value="<?php echo $_POST['t'];?>">
    12. <input name="ok" type="submit" value="Send">
    13. <?php
    14. $array = $_POST;
    15. if (isset($_REQUEST['ok']))
    16.     {
    17.  
    18.                 Session::set('user', $array);
    19.  
    20.     }
    21. print_r($array);
    22. echo $_POST['t'];
    23.  
    24. ?>
    25.  
    Вывожу их на другой странице таким образом:

    PHP:
    1.  
    2. <?php
    3. include_once 'Session.php';
    4. Session::start();
    5.  
    6.  
    7. $res = Session::get('user', $array);
    8.  
    9. $a = $res['v'];
    10. echo $a;
    11.  
    12.  
    13.  
    14. ?>
    15.  
    Но данные хранятся только в рамках одного браузера... да и там хранятся не долго - а мне надо чтобы хранилось всегда... пока не изменят форму - как сделать не подскажите?
     
  2. T-Mon

    T-Mon Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Kyiv
    Сессии на то и сессии, что длятся в течении сессии (прошу прощения за тавтологию). Я точно не помню, можно ли в скрипте задавать длительность сессии (по-мойму, нет), но эти параметры точно указываются в настройках сервера и зависят от политики хостера (хотя не слышал, чтобы кто-то их менял). Почему в пределах одного браузера - да потому, что идентификатор сессии хранится в кукисах, дальше пределов одного браузера, с которым взаимодействует скрипт, он выбраться не может, по этому единственная альтернатива - фиксировать IP пользователя в качестве альтернативного идентификатора сессии, но это чревато последствиями (все компьютеры моего ВУЗа выходят через один прокси). А вообще если уже пишешь класс и при этом хочешь, чтобы все работало "как надо", пиши его полностью сам - и механизм передачи идентификаторов, и механизмы хранения/извлечения информации.
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    stakanych
    часто полезно начинать с задчи, а не сразу с конечной реализации.

    секундё? две? десять? минуту?
     
  4. stakanych

    stakanych Активный пользователь

    С нами с:
    27 янв 2009
    Сообщения:
    62
    Симпатии:
    0
    Хронятся час - может два...
    я просто думал что один раз присвоив переменным сохраненные в сессии данные они там и будут хранится до того как следующий раз им чего то другого не присвоят...

    Вообще то я еще не пишу класс... а позаимствовал у друга, хочу чтобы все работало - но пока все сам написать не могу - мозгов пока не хватает - и многие вещи ставят в тупик...
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    попросите друга дописать в скрипте сохранение сессии в БД
     
  6. T-Mon

    T-Mon Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Kyiv
    А зачем БД, как-то это неправльно, сессии более естественно будет сохранять в файлы, в которых буду храниться сериализованные массивы данных ($data [$session_id] [$session_var_name] => $value).

    P.S. Или в отдельных файлах, где название файла - session_id, а внутри уже одномерный массив. Такой вариант даже лучше будет - не придется сереализировать/десериализовать кучу чужих данных.
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    чем?

    То, что стандартный механизм по умолчанию использует файлы, не делает этот вариант априори единственно верным.
    Если рассматривать сессии, как просто идентификатор наличия пользователя на сайте, то его вообше, имхо, хранить после ухода пользователя не надо. Если говорить про всё ту бодягу, что называется «пользовательские данные», то уж лучше я их БД положу.


    сейчас 440Hz придёт и поделится ссылкой на свои рассуждения с Фанатом что есть сессия…
     
  8. T-Mon

    T-Mon Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Kyiv
    В том то и дело, что этот механизм будет зависеть от наличия и работоспособности баз данных. Плюс, мы не выполняем запросы СУБД, используя низкоуровневые и более надежные технологии. Просто как-то неестественно, для такого мобильного механизма, как сессии, использовать громоздкую систему.
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    пфф, да пусть данные во время сеанса хранятся где хотят, в файлах, мемкэше, даже в хидден-полях (если сильно извратнуться). Разговор о хранении пользовательских данных между сеансами. И теперь, пожалуйста, ещё раз о файлах и БД.

    В догонку. Стандартный механизм сессий для каждого чтиния/записи в файл использует блокировку, которая тоже не мгновенная. БД — это не только mysql, postgresql и т.д., но и SQLite. И, наконец, СУБД — это как раз и есть хорошо структурированные файлы с оптимизированной системой поиска.