如何在 中创建会话JavaScript
?
我像这样尝试:
<script type="text/javascript" >
{
Session["controlID"] ="This is my session";
}
</script>
为什么我要找会话?
我使用 AJAX 请求 XML。我想在会话中存储 XML 响应,而这个会话我想传递给服务器页面 (.asp)。我的意思是写一些类似的东西:
<% response.write session("MySession")%>
如何在 中创建会话JavaScript
?
我像这样尝试:
<script type="text/javascript" >
{
Session["controlID"] ="This is my session";
}
</script>
为什么我要找会话?
我使用 AJAX 请求 XML。我想在会话中存储 XML 响应,而这个会话我想传递给服务器页面 (.asp)。我的意思是写一些类似的东西:
<% response.write session("MySession")%>
您可以在 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')
您可以使用本地存储。
本地存储与会话相同。当您关闭浏览器时,数据将被删除。
<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>
我认为您误解了会话的概念,会话是服务器端每个用户的数据存储,它允许您在服务器端保存用户数据。
因此,您有 2 个选择,使用 cookie,这会产生会话的错觉(但不完全相同),您可以通过 document.cookie 非常简单地访问 cookie。
但是,如果您希望服务器知道会话,则需要使用某种服务器请求,最好的方法可能是使用 AJAX 来执行此操作。
我建议您重新阅读会话的定义。
我假设您使用的是 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 - 如何在 Javascript 中为会话设置值
快乐编码,Tri
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=/";
}