Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2009, 10:24   #1
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,147
Вопрос Ajax и сессии

Собственно следующая проблема.....
Есть скрипт каталога-магазина, в качестве хранения данных корзины используется session...
Появилась потребность пересчитывать суммы товаров в зависимости от их количества в корзине без перезагрузки данных....
прицепил Ajax ..... меняю..... все нормально, но только до того момента как перейду на любцю другую страницу скрипта - при переходе сессия теряется... корзина обнуляется....

в чем могут быть грабли?
ADSoft вне форума Ответить с цитированием
Старый 22.01.2009, 14:39   #2
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

могу посоветовать только отследить ошибку: при каждом соединении в начале и в конце всех скриптов записывать в файл все переменные хранящиеся в сессии (включая идентификатор)

получится что-то вроде
PHP код:
$file_path='путь к файлу лога';
if(
file_exists($file_path)){$log=fopen($file_path,'a');}else{$log=fopen($file_path,'w');}
fwrite($log,'start ('.$GLOBALS['PHPSESSID'].')
'
);
foreach(
$_SESSION as $key=>$value){fwrite($log,'"'.$key.'"=>"'.$value.'"
'
);}
fclose($log); 
по логам отследишь в какой момент теряются нужные переменные или меняется вдруг идентификатор

в результате будет либо найдена ошибка в скрипте либо усовершенствовано создание и изменение сессий






а вообще я тут подумал, сессия хранится на компьютере пользователя и перезаписывается при ответе от сервера (получении новой страницы), так что ajax может просто не отдавать новые полученные данные о сессии в браузер, а лишь использовать их в js-функциях
свободен...

Последний раз редактировалось wall66; 22.01.2009 в 14:43.
wall66 вне форума Ответить с цитированием
Старый 22.01.2009, 15:41   #3
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,714
По умолчанию

Цитата:
Сообщение от wall66 Посмотреть сообщение
сессия хранится на компьютере пользователя и перезаписывается при ответе от сервера (получении новой страницы)
Cессия хранится на сервере! На клиенте хранится идентификатор сессии (PHPSESSID).

Session support in PHP consists of a way to preserve certain data across subsequent accesses. This enables you to build more customized applications and increase the appeal of your web site.

A visitor accessing your web site is assigned a unique id, the so-called session id. This is either stored in a cookie on the user side or is propagated in the URL.


Цитата:
в чем могут быть грабли
2 вирианта
-где-то происходит session_destroy
-сценарий к которому вы обращаетесь с помощью ajax не может найти идентификатор сессии и создает новую, пишет идентификатор и сессия с сохраненными данными больше не асоциируется с данным клиентом
Стрелок-охотник

Последний раз редактировалось mv28jam; 22.01.2009 в 16:01.
mv28jam вне форума Ответить с цитированием
Старый 22.01.2009, 16:14   #4
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

Цитата:
Сообщение от mv28jam Посмотреть сообщение
Cессия хранится на сервере! На клиенте хранится идентификатор сессии (PHPSESSID).
ну может быть и с кукисами перепутал
свободен...
wall66 вне форума Ответить с цитированием
Старый 22.01.2009, 17:12   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,147
По умолчанию

Цитата:
Сообщение от mv28jam Посмотреть сообщение
2 вирианта
-где-то происходит session_destroy
-сценарий к которому вы обращаетесь с помощью ajax не может найти идентификатор сессии и создает новую, пишет идентификатор и сессия с сохраненными данными больше не асоциируется с данным клиентом
1 - отметаем с негодованием, нигде не используется такая функция )))
2 - почему он не может найти?.... и как сделать чтобы нашел? по идее в сценрий аякса PHPSESSION передается..... в рамках данного сценария обработка сессий происходит нормально... а вот потом.... иначинется чехарда....

PHP код:
require_once "../../lib/JsHttpRequest/JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");

$str intval($_REQUEST['str']);
$idd intval($_REQUEST['idd']);
$ss $_REQUEST['PHPSESSID'];
session_start();     
$all_summ =0;$i=0;$count=0;
$cart array_values($cart);
       
$cart[0]['count'] = $str;
$cart[0]['tovar_summ'] = $str*$cart[0]['price'];

    
$GLOBALS['_RESULT'] = array(
      
"str"   => $str,
      
"idd"   => $idd,//$cart[$idd]['tovar_summ'],
      
"summ"  => $str*$cart[0]['price'],
      
"phpsess" => $ss,    
    );

echo 
"php=".$ss;
print_r($cart[0]);
?> 
вот backend ... специально смотрю phpsess - в течении работы на странице остается неизменным....
ADSoft вне форума Ответить с цитированием
Старый 22.01.2009, 18:10   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,147
По умолчанию

Цитата:
Сообщение от mv28jam Посмотреть сообщение
2 вирианта
-где-то происходит session_destroy
-сценарий к которому вы обращаетесь с помощью ajax не может найти идентификатор сессии и создает новую, пишет идентификатор и сессия с сохраненными данными больше не асоциируется с данным клиентом
1 - отметаем с негодованием, нигде не используется такая функция )))
2 - почему он не может найти?.... и как сделать чтобы нашел? по идее в сценрий аякса PHPSESSION передается..... в рамках данного сценария обработка сессий происходит нормально... а вот потом.... иначинется чехарда....

PHP код:
require_once "../../lib/JsHttpRequest/JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");

$str intval($_REQUEST['str']);
$idd intval($_REQUEST['idd']);
$ss $_REQUEST['PHPSESSID'];
session_start();     
$all_summ =0;$i=0;$count=0;
$cart array_values($cart);
       
$cart[0]['count'] = $str;
$cart[0]['tovar_summ'] = $str*$cart[0]['price'];

    
$GLOBALS['_RESULT'] = array(
      
"str"   => $str,
      
"idd"   => $idd,//$cart[$idd]['tovar_summ'],
      
"summ"  => $str*$cart[0]['price'],
      
"phpsess" => $ss,    
    );

echo 
"php=".$ss;
print_r($cart[0]);
?> 
вот backend ... специально смотрю phpsess - в течении работы на странице остается неизменным....
ADSoft вне форума Ответить с цитированием
Старый 23.01.2009, 15:30   #7
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,714
По умолчанию

У меня появились сомнения по поводу написанного так что не гарантирую, но проверить стоит.
Поскольку поддержка сессий у данной библиотеки обьявлена стандартными средствами, то не стоит отдельно передавать её идентификатор. PHPSESSID, указанный в куках или в GET, передается frontend-ом PHP-загрузчику, так же и backend передает идентификатор неявно.

PHP код:
session_start();     
require_once 
"../../lib/JsHttpRequest/JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");

$str intval($_REQUEST['str']);
$idd intval($_REQUEST['idd']);

$all_summ =0;$i=0;$count=0;
$cart array_values($cart);
       
$cart[0]['count'] = $str;
$cart[0]['tovar_summ'] = $str*$cart[0]['price'];

    
$GLOBALS['_RESULT'] = array(
      
"str"   => $str,
      
"idd"   => $idd,//$cart[$idd]['tovar_summ'],
      
"summ"  => $str*$cart[0]['price']
    );

print_r($cart[0]);
?> 
Итого: сессию надо начать до создания обьекта, тк объект просто не узнает о сессии, а правильный результат вычислений будет получен тк сессия будет вызвана.
Стрелок-охотник

Последний раз редактировалось mv28jam; 23.01.2009 в 15:35.
mv28jam вне форума Ответить с цитированием
Старый 23.01.2009, 17:10   #8
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,147
По умолчанию

Всем спасиба за отклики...
2mv28jam - не в этом дело было....
...честно говоря, до сих пор не понял в чем были траблы.... но при изменении скрипта - пропало!
причем изменения косметического характера...
тему можно закрывать...
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из-за этой задачи,не допушен к сессии... Рустем Паскаль, Turbo Pascal, PascalABC.NET 5 16.01.2009 15:25
Результат Зимней Сессии(Pascal) Naper214 Помощь студентам 2 29.12.2008 02:28
Сессии limon PHP 19 29.11.2008 22:46
Расскажите про сессии Pusher PHP 3 21.02.2008 03:10