[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессия и Ajax, как правильно
Astin
Приветствую Форумчане!

Сейчас пишу регистрацию и личный кабинет для сайта. Обработчики форм заявок подключаются через Ajax.

Вот в чем суть вопроса:

1) Точка входа на сайте одна index.php, значит если я устанавливаю на сайт
форму регистрации то должен стартовать сессию session_start(); в самом начале index.php.
Допустим, пользователь зарегистрировался, вошел в личный кабинет и решил добавить
заявку новую. Обработчик заявки подключается через ajax, значит мне нужно в самом
обработчике проверить существование сессии этого юзера, я так понимаю.

Если правильно понимаю, тогда получается в обработчике нужно стартовать тоже сессию,
ну и естественно присвоить id юзера к заявке, что это именно его заявка.

Должно получится что-то вроде этого в обработчике
<?php
session_start();

if(!isset($_SESSION['user_data'])) {

echo 'Вы не авторизированы';

}
else {

// проверяем поля формы

// Если нет ошибок добавляем данные в бд

if(!count($error))
{
$query = "
INSERT INTO
`table`
SET

// Записываем данные из формы

// Присваиваем id юзера к заявке

`user_id` = "
. (int)$_SESSION['user_data']['id'] );

$sql = mysql_query($query) or die("Ошибка данных!");

// получаем номер добавленной записи (id)
$id = mysql_insert_id();

echo 'Успех!!!';
}
// Закрываем сессию
session_write_close();



Код написал как пример, чтоб понятно было о чем я интересуюсь.

В данном случае этот обработчик подключается через ajax и мне важно знать

в правильную сторону ли я мыслю.

_
sergeiss
Правильно мыслишь.
Учти только один важный момент. Если у тебя идет параллельно несколько аяксовых запросов, использующих сессию, то каждый из них будет ждать освобождения сессии. В ряде случаев, если это не контролировать, можно получить очень тормозной сайт.

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

Причина этого, кстати, весьма банальна smile.gif Сессионные данные - это обычный файл. Пока он открыт на запись из одного скрипта, другой скрипт стоит в очереди и ждет доступа. Если не ошибаюсь, там есть еще какой-то таймаут на ожидание.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Astin
sergeiss
Да я об этом слышал. В данном случае аяксы у меня будут только на добавление заявки, удаление и редактирование и session_start(); мне будет нужна только в обработчиках
добавления и редактирования, а после отработки скрипта закрываем сессию session_write_close();, это в обязательном порядке иначе у меня сайт конкретно подвиснет.

Благодарю за ответ
casper - gg
Как вариант, сессию можно вообще убрать из обработчика. То есть если пользователь авторизован, сессия уже по сути существует, вот на основании этого и прятать форму авторизации. Если ее нет, тогды и выводить форму для авторизации или регистрации. А уже по данным из формы делать авторизации/регистрацию, и если обработчик вернет id пользователя, его и ставит в сессию, но только в основном приложении.
Astin
casper - gg
Ну это я так накидал код для того чтоб понятней было что я имею в виду.
Форма регистрации и авторизации будет работать обычно без аякса, только
редактирование данных заявки и сама форма заявки будет работать через аякс.

Думаю записывать сессию юзера в переменную а потом закрывать сессию

Это при авторизации
$user = $_SESSION['user_data'];
session_write_close();


А в обработчике тогда должно вроде как быть так
<?php
session_start();

if (isset($user)) {

// Выполняем действия

}


Честно говоря не знаю правильно так будет или нет, еще не тестил

_
Astin
Мне сессия юзера то нужна для того чтоб записать в бд к заявке которую он заполнил
его идентификатор так как обработчик новой заявки будет подгружаться через аякс.

То есть чтоб он знал что это его заявка.
Так как в личном кабинете юзера я буду выводить только его заполненные заявки.
Быстрый ответ:

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