Несколько классических ASP SessionID при использовании как AJAX, так и стандартных запросов HTML POST - PullRequest
2 голосов
/ 17 февраля 2009

Я использую Classic ASP и немного AJAX, чтобы публиковать содержимое формы обратно на страницу, на которой живет форма AJAX. После AJAX POST страница сохраняет одно из этих полей (в частности, адрес электронной почты) в переменную Session. Затем пользователь занимается своими делами - возможно, снова запрашивает страницу по обычному HTTP.

Однако, это оставляет мой браузер (Firefox 3.0.6) с двумя файлами cookie ASPSESSIONxxxx - я предполагаю, что один для запроса AJAX и один для стандартного вызова HTTP.

Это заставляет страницу (которая зависит от переменной Session) случайным образом выбирать любой ID сеанса ASP из двух созданных - один с установленным Session var и один без.

Я имел дело с этим раньше в PHP и Flash, и вы можете установить идентификатор сессии в PHP, но не в ASP.

Существует ли какой-либо специфический для ASP способ противодействия этому поведению - или я должен просто отказаться от использования файлов cookie?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2009

Бен,

Я почти уверен (хотя я точно не подтвердил), что сеансы двойной проверки подлинности являются результатом рабочего процесса (пула приложений), назначенного более чем одному виртуальному хосту на одном сервере. Есть ли шанс, что это так в вашей среде?

Я наткнулся на эту страницу, так как я почти готов к отладке и развертыванию классической реализации asp ajax, тогда как это проблема, которую я хотел изучить, прежде чем даже сделать это.

Кроме того, поведение сеанса ASP по умолчанию изменилось на протяжении поколений серверов Windows (однако не уверен, как он работает в реализациях IIS в XP / Vista).

Мой пост немного датирован двумя месяцами, вы разрешили эту ситуацию? И любопытно, какую серверную среду / IIS вы тестируете / используете в своей ситуации.

0 голосов
/ 17 февраля 2009

Я думаю, здесь может быть что-то еще.

Я собрал быстрый пример, который, я думаю, выполняет то, что вы описываете, и сеансы, кажется, ведут себя.

<%@ LANGUAGE=VBSCRIPT %>
<% if Request.Form("curid") = "" then %>
<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>

        <script type="text/javascript">
            Event.observe(window, 'load', function() {
                Event.observe($('sessiontest'), 'click', function(event) {
                    Event.stop(event);

                    new Ajax.Request( 'test.asp', {
                        method:  'POST',
                        parameters:  {'curid':  $('curid').value},
                        onSuccess:  function(response) {
                            window.location = 'test.asp';
                        },
                        onFailure:  function() {
                            alert('FAIL!');
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
            <p><input type="text" id="curid" value="<%=Session("curid")%>" /></p>
            <p><a href="#" id="sessiontest">Save ID to Session</a></p>
    </body>
</html>
<% 
else
    Session("curid") = Request.Form("curid")
    Response.write "I was called via POST"
end if 
%>

Я тоже Windows с FF 3.0.6.

...