Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Сессия и Ajax, как правильно
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Приветствую Форумчане!

Сейчас пишу регистрацию и личный кабинет для сайта. Обработчики форм заявок подключаются через 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 и мне важно знать

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

_
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14978
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 3 дня
Карма: 444




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

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

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


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

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

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

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




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

Благодарю за ответ
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 5 дней
Карма: 10




Как вариант, сессию можно вообще убрать из обработчика. То есть если пользователь авторизован, сессия уже по сути существует, вот на основании этого и прятать форму авторизации. Если ее нет, тогды и выводить форму для авторизации или регистрации. А уже по данным из формы делать авторизации/регистрацию, и если обработчик вернет id пользователя, его и ставит в сессию, но только в основном приложении.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




casper - gg
Ну это я так накидал код для того чтоб понятней было что я имею в виду.
Форма регистрации и авторизации будет работать обычно без аякса, только
редактирование данных заявки и сама форма заявки будет работать через аякс.

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

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


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

if (isset($user)) {

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

}


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

_
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




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

То есть чтоб он знал что это его заявка.
Так как в личном кабинете юзера я буду выводить только его заполненные заявки.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса