如何使用JavaScript创建会话?

时间:2010-02-13 13:17:05

标签: javascript asp.net session

如何在JavaScript中创建会话?

我试着这样:

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

为什么我要寻找会话?

我使用AJAX请求XML。 XML响应我想存储在会话中,而这个会话我想传递给服务器页面(.asp)。我的意思是写一些像:

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

14 个答案:

答案 0 :(得分:51)

您可以在cookie中存储和读取字符串信息。

如果是来自服务器的会话ID,则服务器可以生成此cookie。当另一个请求发送到服务器时,cookie也会出现。无需在浏览器中执行任何操作。

但是,如果是javascript则会创建会话ID。您可以使用javascript创建一个cookie,其功能如下:

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=/";
}

然后在每个页面中你需要这个会话ID你可以读取cookie,其功能如下:

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中的页面或从服务器创建的,则读取函数可以从写入它的同一域的任何页面或选项卡中工作。

存储ID:

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

阅读id:

var sId = readCookie('sessionId')

答案 1 :(得分:10)

我假设您正在使用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;
}

调用web方法从javascript创建会话。会话“controlID”将具有值“这是我的会话”。

如果您使用我解释的方式,那么请在您的aspx页面的form标签内添加此代码块。该代码有助于启用页面方法。

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

来源:JavaScript - How to Set values to Session in Javascript

快乐的编码, 三

答案 2 :(得分:9)

我认为您误解了会话的概念,会话是服务器端的每用户数据存储,它允许您在服务器端保存用户数据。

因此,你有两个选择,使用cookie,这将给出会话的错觉(但不完全相同),你可以非常简单地通过document.cookie访问cookie。

但是,如果您希望您的服务器知道会话,您需要使用某种服务器请求,最好的方法是使用AJAX来执行此操作。

我建议你重新阅读会话的定义。

答案 3 :(得分:8)

您可以使用本地存储。

本地存储与会话相同。关闭浏览器时将删除数据。

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

alert(localStorage.getItem('lastname'));
</script>

答案 4 :(得分:1)

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=/";
}

答案 5 :(得分:1)

你可以尝试使用jstorage javascript插件,这是一种维护会话的优雅方式 检查此http://www.jstorage.info/

将jStorage.js脚本包含在您的html中

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

然后在你的javascript中将sessiontoken放入像这样的键

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

“YOUR_KEY”是您可以使用它访问session_id的键,如下所示:

var id = $.jStorage.get("YOUR_KEY");

答案 6 :(得分:1)

您可以使用 sessionStorage ,它类似于localStorage,但是当localStorage没有设置过期时,sessionStorage会在页面会话结束时变清。

https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

答案 7 :(得分:0)

您可以使用name attr:

<script type="text/javascript" >
{
window.name ="This is my session";
}
</script> 

您仍然需要自己开发使用的格式,或者使用现有库中的包装器(mootools,Dojo等)。
您也可以使用cookie,但它们在性能上更加沉重,因为它们从客户端到服务器来回传递,并且特定于一个域。

答案 8 :(得分:0)

您可以在cookie中存储和读取字符串信息。

如果是来自服务器的会话ID,则服务器可以生成此cookie。当另一个请求发送到服务器时,cookie也会出现。无需在浏览器中执行任何操作。

但是,如果是javascript则会创建会话ID。您可以使用javascript创建一个cookie,其功能如下:

如果cookie是从javascript中的页面或从服务器创建的,则读取函数可以从写入它的同一域的任何页面或选项卡中工作。

答案 9 :(得分:0)

如果您创建了一个cookie而没有指定过期日期,它将创建一个会话cookie,该会话cookie将在会话结束时到期。

有关详细信息,请参阅https://stackoverflow.com/a/532660/1901857

答案 10 :(得分:0)

localStorage和jstorage是你最好的选择。 localStorage是内置的,jstorage提供了许多功能性

请参阅localStorage browser support on caniuse

答案 11 :(得分:0)

<script type="text/javascript">
function myfunction()
{
    var IDSes= "10200";
    '<%Session["IDDiv"] = "' + $(this).attr('id') + '"; %>'
    '<%Session["IDSes"] = "' + IDSes+ '"; %>';
     alert('<%=Session["IDSes"] %>');
}
</script>

link

答案 12 :(得分:0)

这是我所做的和它的工作,在PHP中创建了一个会话,并使用xmlhhtprequest检查是否在HTML页面加载时设置会话并且它对Cordova起作用。

答案 13 :(得分:-1)

使用HTML5本地存储。您可以随时存储和使用数据。

{{1}}