[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: $_SESSION в CodeIgniter
zvezda_t
Всем привет!

Стартую сессию в хуке:

Создала файл application\hooks\EC2_Session.php:
function session()
{
//зарегистрировать сеанс
session_start();
}


И в application\config\hooks.php прописала:
$hook['pre_controller'] = array(
'class' => '',
'function' => 'session',
'filename' => 'EC2_Session.php',
'filepath' => 'hooks',
'params' => array()
);


Но когда регистрирую переменные сессии в одном контроллере, а затем делаю redirect на другой контроллер - массив $_SESSION оказывается пустым. Подскажите, пожалуйста - что не так делаю?

Посмотрела, что происходит с файлами сессий. При посещении первой страницы создается файлик сессий и туда записываются мои переменнные, но при редиректе на другую страницу - создается еще один файлик сессий и он уже пуст. Как это исправить? Подскажите, пожалуйста!



Спустя 4 часа, 9 минут, 59 секунд (14.09.2012 - 10:57) Winston написал(а):
ты на каждой странице сессию стартуешь или только на определенных?

Если на каждой, то проще создать файл MY_Controller
С таким содержанием
Свернутый текст
class MY_Controller extends CI_Controller {

public function __construct()
{
parent::__construct();

session_start();
}

}

И положить его в application/core/
И в своих контроллерах наследоваться уже не от CI_Controller, а от MY_Controller
И будет тебе сессия на каждой странице :)

Спустя 6 минут, 58 секунд (14.09.2012 - 11:04) zvezda_t написал(а):
Цитата
ты на каждой странице сессию стартуешь или только на определенных?


Я её через функцию стартую, которая вызывается точкой хука $hook['pre_controller'].

Цитата
'pre_controller':
Вызывается непосредственно перед вызовом любого контроллера. Все основные классы, роутинг и проверки безопасности уже завершены.

Спустя 1 минута, 21 секунда (14.09.2012 - 11:05) Winston написал(а):
Цитата (zvezda_t @ 14.09.2012 - 11:04)
Я её через функцию стартую, которая вызывается точкой хука $hook['pre_controller'].

А стартовать в главном контроллере не подходит?

Спустя 1 минута, 14 секунд (14.09.2012 - 11:07) zvezda_t написал(а):
Winston
не знаю... Сейчас попробую. Посмотрим, может и правда так поможет.

Спустя 22 минуты, 49 секунд (14.09.2012 - 11:30) zvezda_t написал(а):
Winston не получилось.
Если стартую в конструкnоре контроллера CI_Controller, такая же ерунда:

При посещении первой страницы создается файлик сессий и туда записываются мои переменнные, но при редиректе на другую страницу - создается еще один файлик сессий и он уже пуст.

Спустя 2 минуты, 17 секунд (14.09.2012 - 11:32) Winston написал(а):
хм... Наверное что-то где-то очищает сессию...

Спустя 26 минут, 18 секунд (14.09.2012 - 11:58) dron4ik написал(а):
а просто первой строчной в файле входа session_start(); без функции?

Спустя 27 минут, 40 секунд (14.09.2012 - 12:26) zvezda_t написал(а):
Цитата
хм... Наверное что-то где-то очищает сессию...

Winston, не очищается она. Я же говорю - создается еще один физический файл для сессии - и вот он пустой - а старый с моими данными не используется(


dron4ikне помогло. после редирект - еще один файл. все также...
ничего не понимаю(((

Спустя 1 час, 36 минут, 21 секунда (14.09.2012 - 14:02) killer8080 написал(а):
Цитата (zvezda_t @ 14.09.2012 - 12:26)
Я же говорю - создается еще один физический файл для сессии - и вот он пустой - а старый с моими данными не используется(

Значит теряется кука с идентификатором сессии, возможно проблемы с путями кук. Что у тебя в php.ini в session.cookie_path? По умолчанию там '/', если path не указан, то куки привязываются к текущему uri, и на других страницах могут быть недоступны, так же могут проблемы с session.cookie_lifetime. Попробуй перед вызовом сессий сделать так

session_set_cookie_params ( 86400, '/' );
session_start();

Спустя 27 минут, 54 секунды (14.09.2012 - 14:30) zvezda_t написал(а):
Цитата
Значит теряется кука с идентификатором сессии, возможно проблемы с путями кук. Что у тебя в php.ini в session.cookie_path?

session.cookie_path = /

session.cookie_lifetime = 0

Спустя 4 минуты, 45 секунд (14.09.2012 - 14:35) zvezda_t написал(а):
Цитата
session_set_cookie_params ( 86400, '/' );
session_start();

сделала... всё равно теряется сессия sad.gif

Спустя 2 часа, 12 секунд (14.09.2012 - 16:35) dron4ik написал(а):
может они не пишутся... на чем сайт? локалка? Денвер?

Спустя 16 часов, 24 минуты, 21 секунда (15.09.2012 - 08:59) zvezda_t написал(а):
Цитата
может они не пишутся... на чем сайт? локалка? Денвер?

пока локалка. Стоит WAMP.
Кто не пишется- куки? Может CI их удаляет?

Сам файл сессий не пустой:sess_ujgrtvibhmqpfsvcaj2l30sh85:
valid_user|s:2:"33";valid_role|s:1:"1";valid_branch|N;valid_tzone|N;

Спустя 1 час, 12 минут, 29 секунд (15.09.2012 - 10:12) Invis1ble написал(а):
zvezda_t
Отследи заголовки, которые получает и отсылает браузер. Думаю, что-то с куками в самом браузере. Также проверь, повторяется ли ситуация в других браузерах.

Спустя 6 минут, 45 секунд (15.09.2012 - 10:19) zvezda_t написал(а):
Invis1ble, в других браузерах - тоже самое.

Цитата
Отследи заголовки, которые получает и отсылает браузер.


Как это сделать?

Спустя 12 минут, 48 секунд (15.09.2012 - 10:31) Invis1ble написал(а):
Если в других браузерах наблюдается такая же проблема, то дело, скорее всего, все таки не в браузерах.
Цитата
Как это сделать?

смотря где, в Chrome - F12, вкладка Network; в FF - в firebug'е тоже по-моему вкладка Network; в опере и ие тоже аналоги есть.

Спустя 32 минуты, 1 секунда (15.09.2012 - 11:03) zvezda_t написал(а):
Invis1ble, посмотрела.
На первую страницу попадает методом GET.
когда заполняю форму авторизации и нажимаю на кнопку "войти",
все заголовки которые были очищаются и остается только два заголовка

сработанный метод POST и редирект на следующую страницу методом GET.

Спустя 24 минуты, 35 секунд (15.09.2012 - 11:28) Invis1ble написал(а):
я имею в виду заголовки Сookie запроса и Set-Cookie ответа проанализируй. где-то что-то теряется из них.

Спустя 5 минут, 13 секунд (15.09.2012 - 11:33) zvezda_t написал(а):
Цитата
я имею в виду заголовки Сookie запроса и Set-Cookie ответа проанализируй

у Google Chrome F12 на вкладке Network, есть столбцы: Name, Method, Status, Type, Initiator, Size, Time

а где про куки посмотреть? rolleyes.gif

Спустя 6 минут, 30 секунд (15.09.2012 - 11:40) Invis1ble написал(а):
кликаешь на нужном url в столбце Name и во вкладке Headers будут показаны все заголовки

Спустя 13 минут, 40 секунд (15.09.2012 - 11:53) zvezda_t написал(а):
До перехода страницы:

Свернутый текст
Request URL:http://localhost/
Request Method:GET
Status Code:302 Found
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie:PHPSESSID=7lji6mnbn70867182bb0p8cvl5; ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%2213533b4c8c54424152551ca21843e1d8%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A9%3A%22127.0.0.1%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A99%3A%22Mozilla%2F5.0+%28Windows+NT+5.1%29+AppleWebKit%2F537.1+%28KHTML%2C+like+Gecko%29+Chrome%2F21.0.1180.89+Safari%2F537.1%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1347698745%3Bs%3A9%3A%22user_data%22%3Bs%3 A0%3A%22%22%3B%7D8d3832dca44bd56ee80cf44c41a9821f
Host:localhost
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Response Headersview source
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Length:9
Content-Type:text/html
Date:Sat, 15 Sep 2012 08:49:45 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=100
Location:http://127.0.0.1/manager
Pragma:no-cache
Server:Apache/2.2.22 (Win32) PHP/5.4.3
X-Powered-By:PHP/5.4.3


После перехода:

Свернутый текст
Request URL:http://127.0.0.1/manager
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie:PHPSESSID=aoj1h6rum6ijdsicp5a47o3d26; ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%225f6e359af6c5f770df436614dea45e34%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A9%3A%22127.0.0.1%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A99%3A%22Mozilla%2F5.0+%28Windows+NT+5.1%29+AppleWebKit%2F537.1+%28KHTML%2C+like+Gecko%29+Chrome%2F21.0.1180.89+Safari%2F537.1%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1347698037%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D73db5ce38c01fbed230bad504f508eeb
Host:127.0.0.1
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Response Headersview source
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Length:31
Content-Type:text/html
Date:Sat, 15 Sep 2012 08:49:45 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=100
Pragma:no-cache
Server:Apache/2.2.22 (Win32) PHP/5.4.3
X-Powered-By:PHP/5.4.3



PHPSESSID - поменялась. Как это исправить?

Спустя 55 минут, 16 секунд (15.09.2012 - 12:49) zvezda_t написал(а):
Нашла в инете такое предположение о проблеме:
Цитата

Вобщем, проблема оказалась в том, что не правильно было выставлено время (-5 часов), соответственно и сессии не сохранялись, т.к. при обновлении страницы тут же истекали.


Сейчас вывела результат ф-ции date() = 09:46:49, хотя моё время 15:46:49.
Посмотрела настройки php.ini:

Цитата
date
date/time support            enabled
"Olson" Timezone Database  Version  2012.2
Timezone Database            internal
Default timezone            UTC


В этом может быть проблема?
Что нужно изменить?

ЗЫ:Winston спасибо) что то я не нашла - кнопочку - свернутый текст)))

Спустя 10 минут, 11 секунд (15.09.2012 - 12:59) Winston написал(а):
хм.. Проверь в config.php
$config['cookie_path'] значение должно быть /

И настройки сессий примерно следующие
Свернутый текст
$config['sess_cookie_name']		= 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;

Спустя 6 минут, 42 секунды (15.09.2012 - 13:05) zvezda_t написал(а):
Winston, всё так.

Спустя 1 минута, 45 секунд (15.09.2012 - 13:07) Winston написал(а):
Хм.. blink.gif
Попробуй создать отдельно 2 независимых файла и между ними передать сессию, если тоже не будет пахать, значит дело не в CI

Спустя 16 минут, 29 секунд (15.09.2012 - 13:24) zvezda_t написал(а):
Winston
просто два файла, работают:

<?php 
echo "test";
session_start();

$_SESSION['test']='privet';



?>
<html>
<
a href="http://localhost/testses2.php">Переход</a>
</
html>


<?php 
session_start();
echo "test".$_SESSION['test'];

?>


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.