如何使用 JavaScript 创建会话?

Posted

技术标签:

【中文标题】如何使用 JavaScript 创建会话?【英文标题】:How to create a session using JavaScript? 【发布时间】:2011-01-16 11:45:26 【问题描述】:

如何在javascript创建会话?

我尝试这样:

<script type="text/javascript" >

Session["controlID"] ="This is my session";

</script> 

我为什么要寻找会话?

我使用 AJAX 请求 XML。我想存储在会话中的 XML 响应,并且我想将此会话传递给服务器页面(.asp)。我的意思是这样写:

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

【问题讨论】:

看看***.com/questions/1981673 您是在考虑服务器端会话,还是只是一个名为 Session 的 javascript 变量? 【参考方案1】:

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

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

但是,如果是创建会话 ID 的 javascript。您可以使用 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')

【讨论】:

我认为在第一块,应该是,document.cookie = name + "=" + value + ";expires=" + expires + "; path=/"; @user3526,expires 变量已经包含了字符串;expires=,所以不需要再添加。干杯, @Mic document.cookie 正在为我返回一个空字符串 @ZeeshanAhmadKhalil 你是用“s234543245”还是你自己的例子来尝试上面的例子? 他问session,你回答cookie :(答案应该是sessionStorage.setItem("sessionID", "value");这将只存储session中的数据(关闭页面后删除)【参考方案2】:

您可以使用本地存储。

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

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

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

编辑:@Naveen 下面的评论是正确的。您可以改用会话存储。 (https://www.w3schools.com/jsref/prop_win_sessionstorage.asp) 谢谢。

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

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

【讨论】:

不,您需要使用会话存储,每个会话本地存储的会话存储存储没有过期。【参考方案3】:

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

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

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

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

【讨论】:

我为什么要寻找会话是,我使用 ajax 发出对 xml 的请求。我想将 xml 响应存储在会话中,并且我想将此会话传递给服务器页面 (.asp)。这意味着,如果我写 Session驻留在服务器端,不能把"session"传给服务器,除非你指的是sessionID,但还是要在服务器端发起会话,你的意思一定是cookies ,您可以简单地将该数据存储在 cookie 中并从那里重新发送,会话不是正确的术语。 据此 -> thefreedictionary.com/session ,您可以将单词 session 解释为也可以在客户端使用的东西。让我们不要在这里缩小我们的选择范围。在我的脑海中,会话(无论是 DB 会话、事务、Web 会话)是一系列操作,它们都属于开始和结束。【参考方案4】:

我假设您使用的是 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 页面的表单标签中添加这段代码。该代码有助于启用页面方法。

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

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

编码愉快, 行程

【讨论】:

【参考方案5】:
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=/";

【讨论】:

会话 cookie 没有到期日期 en.wikipedia.org/w/…【参考方案6】:

你可以试试 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");

【讨论】:

【参考方案7】:

您可以使用 sessionStorage,它类似于 localStorage,但 sessionStorage 会在页面会话结束时清除,而 localStorage 没有设置过期时间。 见https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

【讨论】:

【参考方案8】:

您可以使用name attr:

<script type="text/javascript" >

window.name ="This is my session";

</script> 

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

【讨论】:

我为什么要寻找会话是,我使用 ajax 发出对 xml 的请求。我想将 xml 响应存储在会话中,并且我想将此会话传递给服务器页面 (.asp)。这意味着,如果我写 【参考方案9】:

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

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

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

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

【讨论】:

【参考方案10】:

如果您创建一个 cookie 并且未指定到期日期,它将创建一个会话 cookie,该会话 cookie 将在会话结束时过期。

更多信息请参见https://***.com/a/532660/1901857。

【讨论】:

【参考方案11】:
<script type="text/javascript">
function myfunction()

    var IDSes= "10200";
    '<%Session["IDDiv"] = "' + $(this).attr('id') + '"; %>'
    '<%Session["IDSes"] = "' + IDSes+ '"; %>';
     alert('<%=Session["IDSes"] %>');

</script>

link

【讨论】:

这不是一个好的做法,它是服务器端/运行时,它只会在页面加载时执行,最好的方法是使用 sessionStorage,如下所述【参考方案12】:

这就是我所做的并且它有效,在 php 中创建了一个会话,并使用 xmlhhtprequest 来检查是否在 HTML 页面加载时设置了会话并且它适用于 Cordova。

【讨论】:

【参考方案13】:

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

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

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

</script>

【讨论】:

sessionStorage 和 localStorage 是不同的东西。

以上是关于如何使用 JavaScript 创建会话?的主要内容,如果未能解决你的问题,请参考以下文章

如何管理 quickblox 会话 Javascript SDK

如何使用 javascript 设置会话 var 并通过 php 代码获取它

在 JavaScript 中如何访问 session?

创建一个会话以不再在投票中投票

如何使用 JQUERY 读取 SESSION 变量

如何使用 javascript 而不是 Django 会话将表单数据(Django 表单)存储到浏览器的本地存储?