Ale*_*lex 38 javascript asp.net session
如何创建会话JavaScript
?
我试着这样:
<script type="text/javascript" >
{
Session["controlID"] ="This is my session";
}
</script>
Run Code Online (Sandbox Code Playgroud)
为什么我要寻找会话?
我使用AJAX请求XML.XML响应我想存储在会话中,而这个会话我想传递给服务器页面(.asp).我的意思是写一些像:
<% response.write session("MySession")%>
Run Code Online (Sandbox Code Playgroud)
Mic*_*Mic 52
您可以在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=/";
}
Run Code Online (Sandbox Code Playgroud)
然后在每个页面中你需要这个会话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 '';
}
Run Code Online (Sandbox Code Playgroud)
如果cookie是从javascript中的页面或从服务器创建的,则read函数可以从写入它的同一域的任何页面或选项卡中工作.
存储ID:
var sId = 's234543245';
writeCookie('sessionId', sId, 3);
Run Code Online (Sandbox Code Playgroud)
要读取ID:
var sId = readCookie('sessionId')
Run Code Online (Sandbox Code Playgroud)
Tri*_*ung 10
我假设您正在使用ASP.NET MVC(C#),如果没有,那么这个答案不在您的问题中.
是不是可以直接通过javascript分配会话值?不,有办法做到这一点.
再看一下你的代码:
<script type="text/javascript" >
{
Session["controlID"] ="This is my session";
}
</script>
Run Code Online (Sandbox Code Playgroud)
一点点改变:
<script type="text/javascript" >
{
<%Session["controlID"] = "This is my session";%>
}
</script>
Run Code Online (Sandbox Code Playgroud)
会话"controlID"已创建,但会话的价值如何?是持久的还是可以通过javascript更改?
让我们改变一点:
<script type="text/javascript" >
{
var strTest = "This is my session";
<%Session["controlID"] = "'+ strTest +'";%>
}
</script>
Run Code Online (Sandbox Code Playgroud)
会话已创建,但会话内的值将为"'+ strTest +'",但不是"这是我的会话".如果您尝试将变量直接写入服务器代码,例如:
<%Session["controlID"] = strTest;%>
Run Code Online (Sandbox Code Playgroud)
然后在您的页面中出现错误"当前上下文中没有参数strTest ...".到目前为止,通过javascript直接分配会话值似乎仍然无法实现.
现在我采取新的方式.在代码后面使用WebMethod来做到这一点.再看一下你的代码有点变化:
<script type="text/javascript" >
{
var strTest = "This is my session";
PageMethods.CreateSessionViaJavascript(strTest);
}
</script>
Run Code Online (Sandbox Code Playgroud)
在代码隐藏页面中.我创建了一个WebMethod:
[System.Web.Services.WebMethod]
public static string CreateSessionViaJavascript(string strTest)
{
Page objp = new Page();
objp.Session["controlID"] = strTest;
return strTest;
}
Run Code Online (Sandbox Code Playgroud)
调用web方法从javascript创建会话后.会话"controlID"将具有值"This is my session".
如果您使用我解释的方式,那么请在您的aspx页面的form标签内添加此代码块.该代码有助于启用页面方法.
<asp:ScriptManager EnablePageMethods="true" ID="MainSM" runat="server" ScriptMode="Release" LoadScriptsBeforeUI="true"></asp:ScriptManager>
Run Code Online (Sandbox Code Playgroud)
来源:JavaScript - 如何在Javascript中将值设置为Session
快乐的编码,三
我认为你误解了session的概念,session是服务器端的每用户数据存储,它允许你在服务器端保存用户数据.
因此,你有两个选择,使用cookie,这将给出会话的错觉(但不完全相同),你可以非常简单地通过document.cookie访问cookie.
但是,如果您希望您的服务器知道会话,您需要使用某种服务器请求,最好的方法是使用AJAX来执行此操作.
我建议你重新阅读会话的定义.
您可以使用本地存储.
本地存储与会话相同.关闭浏览器时将删除数据.
<script>
localStorage.setItem('lastname','Smith');
alert(localStorage.getItem('lastname'));
</script>
Run Code Online (Sandbox Code Playgroud)
您可以使用name
属性:
<script type="text/javascript" >
{
window.name ="This is my session";
}
</script>
Run Code Online (Sandbox Code Playgroud)
您仍然需要自己开发要使用的格式,或者使用现有库(mootools、Dojo 等)中的包装器。
您还可以使用 cookie,但它们对性能的影响更大,因为它们在客户端和服务器之间来回传输,并且特定于一个域。
归档时间: |
|
查看次数: |
260659 次 |
最近记录: |