如何使用 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