Как создать сеанс с использованием JavaScript? - PullRequest
35 голосов
/ 13 февраля 2010

Как создать сессию в JavaScript?

Я пытаюсь так:

<script type="text/javascript" >
{
Session["controlID"] ="This is my session";
}
</script> 

Почему я ищу сессию?

Я делаю запрос на XML с использованием AJAX. Ответ XML, который я хочу сохранить в сеансе, и этот сеанс я хочу передать на страницу сервера (.asp) Я имею в виду написать что-то вроде:

<% response.write session("MySession")%>

Ответы [ 14 ]

51 голосов
/ 13 февраля 2010

Вы можете хранить и читать строковую информацию в куки.

Если это идентификатор сеанса, поступающий с сервера, сервер может создать этот файл cookie. И когда на сервер будет отправлен еще один запрос, файл cookie также появится. Без необходимости что-либо делать в браузере.

Однако, если это Javascript, который создает идентификатор сеанса. Вы можете создать cookie с помощью JavaScript, с помощью функции, подобной:

function writeCookie(name,value,days) {
    var date, expires;
    if (days) {
        date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires=" + date.toGMTString();
            }else{
        expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

Затем на каждой странице вам нужен этот сеанс, который вы можете прочитать с помощью такой функции:

function readCookie(name) {
    var i, c, ca, nameEQ = name + "=";
    ca = document.cookie.split(';');
    for(i=0;i < ca.length;i++) {
        c = ca[i];
        while (c.charAt(0)==' ') {
            c = c.substring(1,c.length);
        }
        if (c.indexOf(nameEQ) == 0) {
            return c.substring(nameEQ.length,c.length);
        }
    }
    return '';
}

Функция чтения работает с любой страницы или вкладки того же домена, в котором она была написана, если файл cookie был создан со страницы в javascript или с сервера.

Для хранения идентификатора:

var sId = 's234543245';
writeCookie('sessionId', sId, 3);

Чтобы прочитать идентификатор:

var sId = readCookie('sessionId')
10 голосов
/ 25 апреля 2013

Я предполагаю, что вы используете ASP.NET MVC (C #), если нет, то этого ответа нет в вашей проблеме.

Нельзя ли назначать значения сеанса напрямую через javascript? Нет, есть способ сделать это.

Посмотри еще раз твой код:

<script type="text/javascript" >
{
Session["controlID"] ="This is my session";
}
</script> 

Немного изменилось:

<script type="text/javascript" >
{
  <%Session["controlID"] = "This is my session";%>
}
</script>

Сеанс "controlID" создан, но как насчет значения сеанса? Это постоянное или может быть изменено с помощью JavaScript?

Позвольте изменить немного больше:

<script type="text/javascript" >
{
  var strTest = "This is my session"; 
  <%Session["controlID"] = "'+ strTest +'";%>
}
</script>

Сессия создана, но значением внутри сессии будет «+ strTest +», а не «Это моя сессия». Если вы попытаетесь записать переменную непосредственно в код сервера, например:

<%Session["controlID"] = strTest;%>

Тогда на вашей странице произойдет ошибка «В текущем контексте нет параметра strTest ...». До сих пор кажется невозможным назначать значения сеанса напрямую через javascript.

Теперь я перехожу на новый путь. Использование WebMethod в коде, чтобы сделать это. Посмотрите еще раз свой код с небольшим изменением:

<script type="text/javascript" >
{
 var strTest = "This is my session"; 
 PageMethods.CreateSessionViaJavascript(strTest);
}
</script> 

На странице с выделенным кодом. Я создаю WebMethod:

[System.Web.Services.WebMethod]
public static string CreateSessionViaJavascript(string strTest)
{
    Page objp = new Page();
    objp.Session["controlID"] = strTest; 
    return strTest;
}

После вызова веб-метода для создания сеанса из JavaScript. Сеанс «controlID» будет иметь значение «Это мой сеанс».

Если вы используете способ, который я объяснил, пожалуйста, добавьте этот блок кода в тег формы на странице aspx. Код помогает включить методы страницы.

<asp:ScriptManager EnablePageMethods="true" ID="MainSM" runat="server" ScriptMode="Release" LoadScriptsBeforeUI="true"></asp:ScriptManager>

Источник: JavaScript - Как установить значения для сеанса в Javascript

Счастливая кодировка, Tri

9 голосов
/ 13 февраля 2010

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

Таким образом, у вас есть 2 варианта, прибегнуть к использованию файлов cookie, что создаст иллюзию сеанса (но не совсем то же самое), вы можете очень просто получить доступ к файлам cookie с помощью document.cookie.

но, если вы хотите, чтобы ваш сервер знал о сеансе, вам нужно использовать какой-то запрос к серверу, вероятно, лучший способ - это использовать AJAX.

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

8 голосов
/ 08 мая 2014

Вы можете использовать Локальное хранилище.

локальное хранилище совпадает с сеансом. данные будут удалены при закрытии браузера.

<script> 
localStorage.setItem('lastname','Smith');

alert(localStorage.getItem('lastname'));
</script>
1 голос
/ 01 июля 2016

Вы можете использовать sessionStorage , оно похоже на localStorage, но sessionStorage становится понятным, когда сеанс страницы заканчивается, а у localStorage не установлен срок действия.

Смотри https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

1 голос
/ 12 августа 2015

Вы можете попробовать плагин jstorage javascript, это элегантный способ поддерживать сессии проверить это http://www.jstorage.info/

включите скрипт jStorage.js в ваш html

<script src="jStorage.js"></script>

Затем в вашем javascript поместите сессионный токен в ключ, подобный этому

$.jStorage.set("YOUR_KEY",session_id);

Где "YOUR_KEY" - это ключ, с помощью которого вы можете получить доступ к идентификатору сессии, например:

var id = $.jStorage.get("YOUR_KEY");
1 голос
/ 09 марта 2011
function writeCookie(name,value,days) {
    var date, expires;
    if (days) {
        date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires=" + date.toGMTString();
            }else{
        expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}
0 голосов
/ 14 ноября 2016

Вот что я сделал, и это сработало, создал сеанс на PHP и использовал xmlhhtprequest, чтобы проверить, установлен ли сеанс при загрузке HTML-страницы, и это работает для Cordova.

0 голосов
/ 22 июля 2016
<script type="text/javascript">
function myfunction()
{
    var IDSes= "10200";
    '<%Session["IDDiv"] = "' + $(this).attr('id') + '"; %>'
    '<%Session["IDSes"] = "' + IDSes+ '"; %>';
     alert('<%=Session["IDSes"] %>');
}
</script>

ссылка

0 голосов
/ 02 июня 2016

Использование HTML5 Local Storage. Вы можете хранить и использовать данные в любое время.

<script>
    // Store
    localStorage.setItem("lastname", "Smith");

    // Retrieve
    var data = localStorage.getItem("lastname");

</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...