JS如何缓存变量

Blu*_*ire 42 html javascript jquery

我想要做的是能够创建一个变量,给它一个值,关闭并重新打开窗口,并能够检索我在上一个会话中设置的值.最简单的方法是什么?欢迎使用JQuery答案.

Den*_*ret 72

使用localStorage.这是持续的会话.

写作 :

localStorage['myKey'] = 'somestring'; // only strings
Run Code Online (Sandbox Code Playgroud)

读 :

var myVar = localStorage['myKey'] || 'defaultValue';
Run Code Online (Sandbox Code Playgroud)

如果需要存储复杂结构,可以使用JSON序列化它们.例如 :

读 :

var stored = localStorage['myKey'];
if (stored) myVar = JSON.parse(stored);
else myVar = {a:'test', b: [1, 2, 3]};
Run Code Online (Sandbox Code Playgroud)

写作 :

localStorage['myKey'] = JSON.stringify(myVar);
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用多个密钥.它们都将被同一域中的所有页面检索.

除非您想与IE7兼容,否则您没有理由使用过时的小cookie.


Kev*_*her 11

你有三个选择:

  1. Cookies:https://developer.mozilla.org/en-US/docs/DOM/document.cookie
  2. DOMStorage(sessionStorage或localStorage):https://developer.mozilla.org/en-US/docs/DOM/Storage
  3. 如果您的用户已登录,您可以将数据保存在服务器的数据库中,该数据库是键入用户(或组)的


tam*_*tam 8

如果您的要求允许,您可以创建一个cookie.如果您选择采用cookie路由,则解决方案可能如下所示.使用cookie的好处还在于用户关闭浏览器并重新打开后,如果尚未删除cookie,则值将保持不变.

Cookie *创建并存储Cookie:*

function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
Run Code Online (Sandbox Code Playgroud)

将返回指定cookie的函数:

function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
  x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
  y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
  x=x.replace(/^\s+|\s+$/g,"");
  if (x==c_name)
    {
    return unescape(y);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果设置了cookie,则显示欢迎消息

function checkCookie()
{
var username=getCookie("username");
  if (username!=null && username!="")
  {
  alert("Welcome again " + username);
  }
else 
  {
  username=prompt("Please enter your name:","");
  if (username!=null && username!="")
    {
    setCookie("username",username,365);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

上述解决方案是通过cookie保存价值.它是一种非常标准的方式,无需在服务器端存储值.

jQuery的

为会话存储设置一个值.

使用Javascript:

$.sessionStorage( 'foo', {data:'bar'} );
Run Code Online (Sandbox Code Playgroud)

检索值:

$.sessionStorage( 'foo', {data:'bar'} );

$.sessionStorage( 'foo' );Results:
{data:'bar'}
Run Code Online (Sandbox Code Playgroud)

本地存储 现在让我们看看本地存储.让我们假设您有一系列您想要保留的变量.你可以这样做:

var names=[];
names[0]=prompt("New name?");
localStorage['names']=JSON.stringify(names);

//...
var storedNames=JSON.parse(localStorage['names']);
Run Code Online (Sandbox Code Playgroud)

使用ASP.NET的服务器端示例

添加到Sesion

Session["FirstName"] = FirstNameTextBox.Text;
Session["LastName"] = LastNameTextBox.Text;
Run Code Online (Sandbox Code Playgroud)

//从会话状态检索对象时,将其强制转换为//适当的类型.

ArrayList stockPicks = (ArrayList)Session["StockPicks"];

// Write the modified stock picks list back to session state.
Session["StockPicks"] = stockPicks;
Run Code Online (Sandbox Code Playgroud)

我希望能回答你的问题.