Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.111.1] |
|
Сообщ.
#1
,
|
|
|
Я пишу прогу в CGI интерфейсе. Как можно запоминать какого-то юзера, который зашел на страничку, сгенеренную этой прогой?
Сначала я отсылаю его в процедуру регистрации: procedure TwbmdLibrary.wbmdLibrarywbactitmAuthorizAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin //проверяем пользователя if Такой_Юзер_Есть=true then //если у него есть разрешение на что-то (это не важно), то пишем в кукисах, что он "свой" with Response.Cookies.Add do begin Name := 'LastName'; Value := Request.QueryFields.Values['NameAuth'];//берется из поля ввода, где вводится имя if Value = '' then Value := Request.CookieFields.Values['LastName']; Secure := True; Expires := Now + 1;//сохраняем этот cookie в течение суток end; end; потом в другой процедуре я пытаюсь прочитать этот кукис, но он почему-то к тому времени уже пуст: Request.CookieFields.Values['LastName'] всегда пуст и даже Response.Cookies.Count всегда равен 0 Как быть? |
Сообщ.
#2
,
|
|
|
Проверь время действие кука - и процедура запускается при томже обращении или нет ?
|
Сообщ.
#3
,
|
|
|
дык я ж его даже прочитать не могу, т.к. он пуст. Как же я могу прочитать время его действия?
А процедура вызывается по-любому, там же ошибок нету, чего ей не запуститься? |
Сообщ.
#4
,
|
|
|
Да ни прич чтении чекать а при записи указать
|
Сообщ.
#5
,
|
|
|
да. я при записи же и указываю
Expires := Now + 1;//сохраняем этот cookie в течение суток а потом он почему-то не читается..... точнее не читался. Сейчас у меня другой бред. в общем вот: при входе на страничку юзеру подгружается обычная (типа для Гостя). Если он указывает имя и пароль, при нажатии на "Вход" идет поиск этого юзера в БД. Если все ОК (если он там есть), то опять происходит запись в кукис и автоматом вызывается первая процедура. В ней-то и читается этот кукис и в ней же смотрится. если этот юзер был, то грузится страница уже не для Гостя, а для Своего Так вот. Новый берд заключается в том, что этот кукис читается через раз. Т.е. мы записываем что-то и это что-то считывается только на второе чтение... например: 1. вошли, ввели Login: Vasia Pass: Pupk 2. читаем - пусто 3. опять просто вводим Login: abc Pass: 123 4. читаем - Vasia, Pupk 5. вводим Login: qwerty Pass: 0987 6. читаем abc, 123............................... можно ничего не вводить, т.е. просто жать "войти", тоже самое - т.е. то, что было в полях ввода в позапрошлый раз, то и выводится. Т.е. не в ПРОШЛЫЙ, а в ПОЗАпрошлый |
Сообщ.
#6
,
|
|
|
Оно даёт либо не в течении суток а в течении секунды
тогда надо ставить Now + 3600*24 Либо где ктото не правильно переводит время ... Добавлено в Кукис читается на следующем запросе после сохранения |
Сообщ.
#7
,
|
|
|
Now возвращает полную дату, где целое число - это кол-во дней от 31.12.1899, а число после запятой указывает кол-во миллисекунд с начала суток
Прибавляя 1 к Now, мы увеличиваем время жизни Cookies'а на сутки, а не на секунду. Вот если бы мы прибавили что-то типа 1/(24*3600), тогда увеличили бы на секунду... Понял только что (раньше пробовал, но почему-то не получалось)... Короче, надо было страничку обновлять Ctrl+R, чтобы очистить кэш, тогда кукис нормально читается. Но опять повторюсь, раньше почему-то не получалось (но возможно от монотонности задачи меня глючило (постоянно смотреть один и тот же результат) и поэтому я что-то не так делал) В общем, все ок вроде |
Сообщ.
#8
,
|
|
|
не..... опять тупизм....
когда я вошел и потом просто жму Ctrl+R - все ОК. Он мне пишет "Здравствуйте, <UserName>" Но когда я пытаюсь что-то нажать (у мя там есть формы с кнопками, типа "Показать" и т.п.), он мне опять потом пишет, что я гость.... Т.е. кукис очищается (я даже время жизни поставил now+1*24*3600, что явл. 236 лет....) Вщм, если просто чистить кэш, то все ок, а если по форме обновить (нажать какую-нть кнопку), то кукис почему-то чистится весь и в нем ничего нету... |
Сообщ.
#9
,
|
|
|
по ходу еще один вопрос:
как послать кукис? т.е. я могу прочитать его только при след. обращении к какой-то процедуре, а мне надо, чтобы можно было и в этом же. Пример: //в этой процедуре я обновляю кукис procedure MyProc(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var MyCook:TStrings; User,Pass:string; begin ... MyCook:=TStringList.Create; MyCook.Clear; MyCook.Add('LastLogin='+User); MyCook.Add('LastPassword='+Pass); MyCook.Add('LastVisit='+FormatDateTime('dd mmmm yyyy hh:mm:ss',now)); Response.SetCookieField(MyCook,'','',now+1,true); {***} MyCook.Free; end; procedure TMyWebModule1.WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin MyProc(Request, Response);//обновляем кукис Request.CookieFields.Text;//возвращает старый кукис, который мы писали в прошлый раз, а мне нужен новый, который уже обновили (предыдущая строка) end; Мне надо в месте {***} как-то послать этот кукис, чтобы он обновился... Как это можно сделать (если вообще можно)? Или я что-то не так сделал? |