[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как передать переменную сессии через ajax
zvezda_t
Здравствуйте!

Столкнулась с такой ситуацией: после того как передаю управление файлу send.php через ajax:


....
query = "val="+a;
Request(query);

function Request(query)
{
req_pv.open('post', '/ajax/send.php' , true );
req_pv.onreadystatechange = Refresh_pv;
req_pv.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req_pv.send(query);
}


в файле send.php, переменные сессии не определены(((
Скажите пожалуйста как -нибудь можно подключить именно мой сеанс? Я работаю ч/з Joomla.

send.php


//зарегистрировать сеанс
session_start();

if(!empty($_POST["val"]) )
{
echo $_SESSION['spr'];//не определена
}


Спасибо.



Спустя 21 минута, 25 секунд (3.03.2011 - 15:15) Zerstoren написал(а):
Напиши сначала так, в /ajax/send.php
var_dump($_SESSION,$_POST)


Проверь существование сессии и поста.

Если пост не обнаружен - значит причина, что данные не передаются.
Если с постом все ок. То смотри что тебе ответит вар_дамп на сессию.

Спустя 17 минут, 53 секунды (3.03.2011 - 15:33) zvezda_t написал(а):
Цитата
Если с постом все ок. То смотри что тебе ответит вар_дамп на сессию.

var_dump($_SESSION):

Цитата
array(0) { }


Спустя 56 минут, 6 секунд (3.03.2011 - 16:29) Zerstoren написал(а):
А на странице где отправляется запрос, что происходит с $_SESSION['spr']? Она существует?

Спустя 1 минута, 39 секунд (3.03.2011 - 16:31) Oyeme написал(а):
ajax вообще тут не причём,сессия должна выводиться.Если она была созданна и не была обнуленна.

Спустя 7 минут, 16 секунд (3.03.2011 - 16:38) Zerstoren написал(а):
Цитата (Oyeme @ 3.03.2011 - 13:31)
ajax вообще тут не причём,сессия должна выводиться.Если она была созданна и не была обнуленна.

А я ничего про Аджакс не сказал.
Я спросил - существует ли элемент массива у сессии.

Если его нету даже на странице от куда происходит вызов, то значит он:
1) - не объявлен
2) - убит

Логика проста. Если здесь ее нету. То идем выше и находим место где она исчезает.

Что при этом вызывается и что проходит, читаем каждую строчку и осмысливаем ее.

Спустя 14 часов, 59 минут, 44 секунды (4.03.2011 - 07:38) zvezda_t написал(а):
Zerstoren, восхищаюсь Вашим основательным подходом!

Итак:
на странице откуда происходит вызов сессия не пуста:
Цитата

array(5) { ["__default"]=> array(7) { ["session.counter"]=> int(4) ["session.timer.start"]=> int(1299213326) ["session.timer.last"]=> int(1299213335) ["session.timer.now"]=> int(1299213338) ["session.client.browser"]=> string(75) "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" ["registry"]=> object(JRegistry)#12 (3) { ["_defaultNameSpace"]=> string(7) "session" ["_registry"]=> array(1) { ["session"]=> array(1) { ["data"]=> object(stdClass)#13 (0) { } } } ["_errors"]=> array(0) { } } ["user"]=> &object(JUser)#14 (19) { ["id"]=> int(0) ["name"]=> NULL ["username"]=> NULL ["email"]=> NULL ["password"]=> NULL ["password_clear"]=> string(0) "" ["usertype"]=> NULL ["block"]=> NULL ["sendEmail"]=> int(0) ["gid"]=> int(0) ["registerDate"]=> NULL ["lastvisitDate"]=> NULL ["activation"]=> NULL ["params"]=> NULL ["aid"]=> int(0) ["guest"]=> int(1) ["_params"]=> object(JParameter)#15 (7) { ["_raw"]=> string(0) "" ["_xml"]=> NULL ["_elements"]=> array(0) { } ["_elementPath"]=> array(1) { [0]=> string(51) "C:\www\libraries\joomla\html\parameter\element" } ["_defaultNameSpace"]=> string(8) "_default" ["_registry"]=> array(1) { ["_default"]=> array(1) { ["data"]=> object(stdClass)#16 (0) { } } } ["_errors"]=> array(0) { } } ["_errorMsg"]=> NULL ["_errors"]=> array(0) { } } } ["DBCONNECT"]=> int(1) ["v_user"]=> int(31) ["spr"]=> int(5) ["rr"]=> array(2) { [0]=> int(271) [1]=> int(263) } }

Спустя 3 часа, 34 минуты, 36 секунд (4.03.2011 - 11:13) Zerstoren написал(а):
Такс, не знакомы Вы с вардампом)

Откройте html исходник где вызван вар_дамп и скопируйте что он отдаст. Форматирование сохраниете.



А лучше всего - сделайте вар_дамп в конце index.php. (Мало-ли чего там джумла творит)

Спустя 2 минуты, 28 секунд (4.03.2011 - 11:15) Michael написал(а):
zvezda_t, куки отключены что ли?

Спустя 3 часа, 57 минут, 7 секунд (4.03.2011 - 15:12) zvezda_t написал(а):
Zerstoren
а что не так?
вот же в конце, есть моя переменная
Цитата
["spr"]=> int(5)


Цитата
zvezda_t, куки отключены что ли?

Michael, как проверить и где? rolleyes.gif

Спустя 18 минут, 21 секунда (4.03.2011 - 15:31) Zerstoren написал(а):
А Вы уверены что она находится в
$_SESSION['spr']
а не в
$_SESSION['_default']['spr'] ?

и еще
перед session_start(); есть вывод каких-то данных?

Спустя 15 минут, 19 секунд (4.03.2011 - 15:46) Michael написал(а):
Это в браузере смотрится.
В Firefox например - Инструменты, настройки, приватность. И тут: История.

Спустя 35 секунд (4.03.2011 - 15:47) zvezda_t написал(а):
Цитата
А Вы уверены что она находится в
$_SESSION['spr']
а не в
$_SESSION['_default']['spr'] ?


ничего себе! еще и такое бывает....
но ведь регистрировала я переменную сессии просто:
$_SESSION['spr']=5;

а не как $_SESSION['_default']['spr']. или это от меня не зависит?


Цитата
перед session_start(); есть вывод каких-то данных?

вывода нет. есть подключение файлика с функциями:
require_once("db/connect.php");


Michael, а как куки влияют на область видимости сессии? и это что все пользователи моего сайта должны настройки у себя проверять?

Спустя 13 минут, 53 секунды (4.03.2011 - 16:00) Michael написал(а):
Цитата (zvezda_t @ 4.03.2011 - 14:47)
Michael, а как куки влияют на область видимости сессии? и это что все пользователи моего сайта должны настройки у себя проверять?

Причем тут область видимости сессии если ты пишешь, что:
Цитата
Цитата
Если с постом все ок. То смотри что тебе ответит вар_дамп на сессию.

var_dump($_SESSION):

Цитата
array(0) { }

, т.е. сессию вообще не видит. Или уже видит?
Куки важны для сессии, т.к. именно в куках хранится сессионная кука laugh.gif . По ней стартует сессия на сервере( при вызове session_start()). Не только по ней может, но это пока не важно.

В друпале например без кук можно только под анонимом работать. Не зареганным.

Спустя 4 минуты (4.03.2011 - 16:04) zvezda_t написал(а):
Цитата
, т.е. сессию вообще не видит. Или уже видит?

не видет ранее созданную.
а вот если в этом же файле зарегистрировать новую переменную сессии, то видит rolleyes.gif

Спустя 8 минут, 30 секунд (4.03.2011 - 16:13) Michael написал(а):
все должно работать. Ты чего то недоговариваешь. Гадать тут бесполезно. Учись дебажить.
Установила переменную сессии и проверяй на каждом этапе работы что с ней происходит. Можешь например просто в какой то файл дописывать ее значения. (логирование).

Спустя 50 минут, 40 секунд (4.03.2011 - 17:04) Zerstoren написал(а):
Мне кажется что где-то стоит противная строчка $_SESSION = array();

Но если нет - то тут нуна дебажить без форума.

Спустя 14 часов, 34 минуты (5.03.2011 - 07:38) zvezda_t написал(а):
Цитата
Учись дебажить.

что это значит?

Спустя 17 минут, 10 секунд (5.03.2011 - 07:55) inpost написал(а):
В самом конце документа, откуда вызывается аякс, напиши:
<?php echo '<script>alert("TEXT '.$_SESSION['spr'].'")</script>'; ?>

После:
И сразу после него попытайся вызвать страницу аяксом, можно прям в этом скрипте, посмотри на результат работы.
Проверь переход на другую страницу, передаётся ли сессия между ними.

Спустя 7 минут, 14 секунд (5.03.2011 - 08:02) zvezda_t написал(а):
Цитата
Проверь переход на другую страницу, передаётся ли сессия между ними.

не передаётся

фуф... весь форум перевернула и нашла свою старую тему smile.gif
У меня такая же проблема была, и так я и не смогла её решить.
Вася тогда сказал, что может быть проблема в имени сессии:
Цитата
session_name() возвращает имя сессии. Если именна сессий не совпадают то и переменные сохраненные в одной сессии не доступны в другой. Это нормальный подход. Все что тебе надо это передать имя сессии в свой скрипт. и там её использовать

я так попробовала, не получилось у меня unsure.gif

Я же использую cms Joomla, а когда вызываю страницу аяксом, там уже нет модулей cms. Мне кажется поэтому и сессия новая открывается, а сессия зарегистрированная cms не работает sad.gif

Спустя 1 час, 1 минута, 7 секунд (5.03.2011 - 09:03) Семён написал(а):
Всё верно, zvezda_t почитайте про область видимости сессии.
Пример решения твоей проблемы:

session_id($_COOKIE['JOOMLA']); //Где Joomla нужно поменять на твой ключ в куках.
session_start(); //Только теперь мы сможем работать с сессией.
/* Проверку на существование $_COOKIE[key] в production-е, не забудь сделать */


Спустя 14 минут, 28 секунд (5.03.2011 - 09:18) zvezda_t написал(а):
Цитата
//Где Joomla нужно поменять на твой ключ в куках.

Семён, как мне узнать мой ключ в куках?
или это 'spr'?
$_COOKIE['spr'] в файле вызванном ч/з ajax не существует. unsure.gif

Спустя 4 минуты, 42 секунды (5.03.2011 - 09:22) Семён написал(а):
Конечно не spr!
В своём файле где ты хочешь получить сессию, напиши
<?
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
?>


Теперь смотри наличие либо уникального ключа Jooml-ы, либо PHPSESSID

Спустя 8 минут, 16 секунд (5.03.2011 - 09:31) Семён написал(а):
Блин сейчас не поленюсь поставлю Jooml-у и проверю реально ли там такие грабли.

Спустя 12 минут, 42 секунды (5.03.2011 - 09:43) zvezda_t написал(а):
<?
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
?>

добавила этот код в файл вызывающий аякс и в файл который получил управление.

и там и там получила одинаковый результат:
Цитата
Array
(
    [2eb88300ef2f70c17e2766798f1b2672] => r9p055uo0d7pp7dod16ama4hp5
    [PHPSESSID] => r9p055uo0d7pp7dod16ama4hp5
)



В файле где хочу получить сессию пишу так:
1)
session_id($_COOKIE['2eb88300ef2f70c17e2766798f1b2672']); 
session_start();
print "s=".$_SESSION['spr'];


Цитата
Notice: Undefined index: spr in C:\www\file\dct.php on line 11
s=


2)
session_id($_COOKIE['r9p055uo0d7pp7dod16ama4hp5']); 
session_start();
print "s=".$_SESSION['spr'];


Цитата
Notice: Undefined index: r9p055uo0d7pp7dod16ama4hp5 in C:\www\file\dct.php on line 6

Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in C:\www\file\dct.php on line 7

Notice: Undefined index: spr in C:\www\file\dct.php on line 11
s=

Спустя 4 минуты, 53 секунды (5.03.2011 - 09:48) Семён написал(а):
Вообщем поставил Joomлу, да тут просто не получится указать ID сессии.
Придётся её решить с использованием и подключением fw Jooml-ы.
Сейчас проверил, всё работает, держи (проверил на 1.6, но будет и пахать на 1.5)

<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__)); //Обрати внимание сюда. (если у тебя файл лежит не в корне сайта, то измени на DOCUMENT_ROOT
define( 'DS', DIRECTORY_SEPARATOR );

require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');

$session = &JFactory::getSession(); //Здесь то что нужно тебе

echo "<pre>";
print_r($session);
echo "</pre>";
?>

Спустя 24 минуты, 36 секунд (5.03.2011 - 10:13) zvezda_t написал(а):

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname($_SERVER['DOCUMENT_ROOT'].'www'));
define( 'DS', DIRECTORY_SEPARATOR );

require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');

//$_SERVER['DOCUMENT_ROOT']='C:/www/'
//JPATH_BASE='C:/www'
//JPATH_BASE . DS . 'includes' . DS . 'defines.php'='C:/www\includes\defines.php'


$session = &JFactory::getSession(); //Здесь то что нужно тебе

echo "<pre>";
print_r($session);
echo "</pre>";
print "s=".$_SESSION['spr'];


результат:
Цитата
JSession Object
(
    [_state] => active
    [_expire] => 900
    [_store] => JSessionStorageNone Object
        (
            [_errors] => Array
                (
                )

        )

    [_security] => Array
        (
            [0] => fix_browser
        )

    [_force_ssl] =>
    [_errors] => Array
        (
        )

)


Notice: Undefined index: spr in C:\www\file\dct.php on line 20
s=

Спустя 12 минут, 18 секунд (5.03.2011 - 10:25) zvezda_t написал(а):
...
$result=mssql_query($query);
if(mssql_num_rows($result)>0)
{
$row=mssql_fetch_array($result);
$user=$row['id'];
//Если пользователь записан в базе данных,
//зарегистрировать его идентификатор

$_SESSION['user']=$user;
$_SESSION['spr']='1';
}

Спустя 1 минута, 54 секунды (5.03.2011 - 10:27) Семён написал(а):
Сейчас погуглил. Нашёл такую инфу:
http://ask.webcheatsheet.com/questions/212...es-from-my-code

И вообще ты сессии устанавливай используя Framework...
$session     	= &JFactory::getSession();
$session->set('myKey', 'myValue');
echo $session->get('myKey');

Спустя 7 минут, 34 секунды (5.03.2011 - 10:35) zvezda_t написал(а):
В файле, который передаёт управление видно все переменные сессии, а в котором хочу получить свою сессию, не полностью вижу её переменные, только [__default]:
echo "<pre>";
print_r($_SESSION);
echo "</pre>";


Цитата
Array
(
    [__default] => Array
        (
            [session.counter] => 15
            [session.timer.start] => 1299308159
            [session.timer.last] => 1299310128
            [session.timer.now] => 1299310317
            [session.client.browser] => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
        )

)

Спустя 3 минуты, 58 секунд (5.03.2011 - 10:38) zvezda_t написал(а):
а в том который вызывает:
echo "<pre>";
print_r($_SESSION);
echo "</pre>";

Цитата
Array
(
    [__default] => Array
        (
            [session.counter] => 87
            [session.timer.start] => 1299305631
            [session.timer.last] => 1299310298
            [session.timer.now] => 1299310591
            [session.client.browser] => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
            [registry] => JRegistry Object
                (
                    [_defaultNameSpace] => session
                    [_registry] => Array
                        (
                            [session] => Array
                                (
                                    [data] => stdClass Object
                                        (
                                        )

                                )

                        )

                    [_errors] => Array
                        (
                        )

                )

            [user] => JUser Object
                (
                    [id] => 0
                    [name] =>
                    [username] =>
                    [email] =>
                    [password] =>
                    [password_clear] =>
                    [usertype] =>
                    [block] =>
                    [sendEmail] => 0
                    [gid] => 0
                    [registerDate] =>
                    [lastvisitDate] =>
                    [activation] =>
                    [params] =>
                    [aid] => 0
                    [guest] => 1
                    [_params] => JParameter Object
                        (
                            [_raw] =>
                            [_xml] =>
                            [_elements] => Array
                                (
                                )

                            [_elementPath] => Array
                                (
                                    [0] => C:\www\libraries\joomla\html\parameter\element
                                )

                            [_defaultNameSpace] => _default
                            [_registry] => Array
                                (
                                    [_default] => Array
                                        (
                                            [data] => stdClass Object
                                                (
                                                )

                                        )

                                )

                            [_errors] => Array
                                (
                                )

                        )

                    [_errorMsg] =>
                    [_errors] => Array
                        (
                        )

                )
         
        )

 
    [user] => 2
    [spr] => 1

)

Спустя 3 минуты, 18 секунд (5.03.2011 - 10:42) zvezda_t написал(а):
почему в файле вызванном через ajax урезанная версия массива $_SESSION? unsure.gif

Спустя 8 минут, 30 секунд (5.03.2011 - 10:50) Семён написал(а):
По ссылочке выше посмотри как вытаскивать сессии.

Спустя 8 минут, 24 секунды (5.03.2011 - 10:59) zvezda_t написал(а):
Мне их придется переопределить теперь нада что-ли? Как я написала, не пойдет никак? rolleyes.gif

Спустя 3 часа, 45 минут, 50 секунд (5.03.2011 - 14:45) Trianon написал(а):
а session_id() возвращает один и тот же идентификатор?

Спустя 7 минут, 59 секунд (5.03.2011 - 14:52) Michael написал(а):
ацкая тема. Почему на форуме джумлы не спросить? ohmy.gif У движков свои API, свои приколы. Наугад с ними работать как бы ...

Спустя 6 месяцев, 24 дня, 36 минут, 51 секунда (29.09.2011 - 14:29) zvezda_t написал(а):
опять это же проблема(
не вижу значения своей сессии((((
уже плачу...

Цитата
а session_id() возвращает один и тот же идентификатор?

нет, разные

Спустя 20 минут, 21 секунда (29.09.2011 - 14:50) zvezda_t написал(а):
В файле index.php джумлы после строк
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );


добавила строчку:
$gSess = &JFactory::getSession();


вроде теперь работает...


_____________

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

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