2013-08-05 2 views
1

У меня есть одностраничный сайт, в котором используется AJAX. Все действия пользователя отправляются на URL-адрес в форме, например. requests.aspx?obid=1&verb=shownotesПроблемы с сессией сессии ASP.Net

Срок действия сеанса на моем хостинг-провайдере установлен на 5 минут, что слишком мало. Я изо всех сил пытаюсь заставить их изменить это.

Я пробовал использовать setInterval для отправки запроса на сервер каждые 30 секунд, но сеансы по-прежнему истекают через 5 минут. Информация в запросе setInterval выглядит так же, как пользовательский запрос, но я думаю, что сервер не обманут.

У меня отключено кэширование с jQuery.

Я не использую куки.

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

Каков наилучший способ обеспечить сохранность сеанса?

EDIT: Ниже заголовки запросов, скопированные из Chrome Developer Tools:

заголовков запросов для типичных действий пользователя:

POST /requests.aspx?obid=0&otid=203&verb=display&param1=0&param2=0&param3=0 HTTP/1.1 
Host: applify.co.za 
Connection: keep-alive 
Content-Length: 0 
Accept: application/json, text/javascript, */*; q=0.01 
Origin: http://applify.co.za 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 
DNT: 1 
Referer: http://applify.co.za/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: ASP.NET_SessionId=4li3ilr0bsb5yc1uf5oy1pd1 

заголовков запросов для setInterval действий:

POST /requests.aspx?obid=0&otid=545&verb=donothing&param1=&param2=&param3= HTTP/1.1 
Host: applify.co.za 
Connection: keep-alive 
Content-Length: 0 
Accept: application/json, text/javascript, */*; q=0.01 
Origin: http://applify.co.za 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 
DNT: 1 
Referer: http://applify.co.za/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: ASP.NET_SessionId=4li3ilr0bsb5yc1uf5oy1pd1 

Оба смотрют почти то же.

+0

Используете ли вы проверку подлинности на основе форм? – Abhitalks

ответ

0

Вы можете попробовать добавить суффикс, например, метка времени:

(через JS)

var t='requests.aspx?obid=1&verb=shownotes'; 
t+='&'+(1*new Date()) 

продолжают с просьбой ....

или через C#

...requests.aspx?obid=1&verb=shownotes&t=<%=DateTime.Now.Ticks%>

ps отправьте свой код интервала времени, чтобы мы могли его увидеть.

NB

  • JQuery Ajax имеет cache свойство, которое true по умолчанию (ИМХО)

    попробуйте установить его в false. это добавит метку времени.

  • Можете ли вы выслать код для кода aspx? (Я хочу посмотреть, есть ли там ClearHeaders или Response.End ....

+0

Я уже пробовал '$ .ajaxSetup ({cache: false});'. Попробуем суффикс метки времени. –

+0

@CorneBeukes посмотреть на chrome developertool bar, для заголовков и разместить его в вашем вопросе –

+0

Я отредактировал сообщение, чтобы показать типичные запросы. –

0

Вы можете переопределить тайм-аут сеанса в своем Интернете.конфигурации:

<system.web> 
    <sessionState timeout="60" /> 
</system.web> 

Поскольку вы не используете куки, вы можете конкретно указать cookieless=true.

+0

Тайм-аут контролируется хостинг-провайдером, а настройка sessionstate в 'web.config' не влияет. –