【问题标题】:How to send variables from one file to another in Javascript? [duplicate]如何在Javascript中将变量从一个文件发送到另一个文件? [复制]
【发布时间】:2013-06-22 22:48:43
【问题描述】:

我想将用户名和密码从页面login.html 发送到index.html。我怎样才能尽可能简单地做到这一点?以及如何对我的字符串进行编码,使其成为 URL 编码和 UTF-8?

干杯

【问题讨论】:

  • 查看this。此外,还有很多关于这个主题的信息。你应该打开你的谷歌。
  • "问题必须证明对所解决的问题有最低限度的了解。告诉我们您尝试过什么,为什么它不起作用,以及它应该如何工作。" 投票结束。
  • @jahroy 为什么你们标记为重复?在给定的 URL 中没有被接受的正确答案。
  • 您可以在这里找到完整的答案:stackoverflow.com/a/30070207/2247494

标签: javascript jquery html


【解决方案1】:

您可以使用 cookieswindow.name、通过 url 作为查询字符串或通过web storage 发送数据。

在这个例子中,我将使用 localStorage - (specs), 和以下方法:

login.html

function saveData(user, pass) {
   var account = {
     User: user,
     Pass: pass
   };
   //converts to JSON string the Object
   account = JSON.stringify(account);
   //creates a base-64 encoded ASCII string
   account = btoa(account);
   //save the encoded accout to web storage
   localStorage.setItem('_account', account);
}

index.html

function loadData() {
   var account = localStorage.getItem('_account');
   if (!account) return false;
   localStorage.removeItem('_account');
   //decodes a string data encoded using base-64
   account = atob(account);
   //parses to Object the JSON string
   account = JSON.parse(account);
   //do what you need with the Object
   fillFields(account.User, account.Pass);
   return true;
}

通过 url 作为 querystring (search)

将对象从一个页面传递到另一个页面

login.html

function saveData(user, pass) {
   var account = {
     User: user,
     Pass: pass
   };
   account = JSON.stringify(account);
   account = btoa(account);
   location.assign("index.html?a=" + account);
}

index.html

function loadData() {
   var account = location.search;
   if (!account) return false;
   account = account.substr(1);
   //gets the 'a' parameter from querystring
   var a = (/^a=/);
   account = account.split("&").filter(function(item) {
      return a.test(item);
   });
   if (!account.length) return false;
   //gets the first element 'a' matched
   account = account[0].replace("a=", "");
   account = atob(account);
   account = JSON.parse(account);
   //do what you need with the Object
   fillFields(account.User, account.Pass);
   return true;
}

在此处查看扩展答案:https://stackoverflow.com/a/30070207/2247494

【讨论】:

  • 这...var account = localStorage.getItem('_account'); if (!account) return false; ...要求在检查localStorage是否存在之前加载任何数据,而这...if(account in localStorage) { //do something...只是检查您的数据密钥是否存在在本地存储中。它为您获得的处理时间可以忽略不计,但它为您节省了 return 语句,并且(恕我直言)看起来更干净。
  • 感谢@MistyDawn 的建议,确实检查存储中的属性比获取与密钥关联的数据要快。
【解决方案2】:

您可以使用 jquery-cookie 插件:
https://github.com/carhartl/jquery-cookie

用法:

<script src="/path/to/jquery.cookie.js"></script>

创建会话 cookie:

$.cookie('cookieName', 'myValue');

创建过期 cookie,从那时起 7 天:

$.cookie('cookieName', 'myValue', { expires: 7 });

读取 cookie:

$.cookie('cookieName'); // => "myValue"

删除 cookie:

$.removeCookie('cookieName');

【讨论】:

  • 我用过那个插件,不错!但是你不需要cookies,只需使用[localStorage]来保存本地数据。
【解决方案3】:

饼干!对你的肚子很好吃。


这很有趣,但这是一个真实的答案。您可能希望将信息存储在 cookie 中。这是将信息从 Web 应用程序的一个部分传递到另一个部分的好方法。这是一种通用技术,因此所有平台都支持它。

记住 cookie 是公开的,所以不要放任何可能被黑客入侵的信息。您应该散列和/或加密 cookie 中的值。您还可以生成随机信息——这是最好的。例如,当用户登录时生成一个随机数并将该数字和用户 ID 存储在一个表中,然后将该随机数作为 cookie 传递。这样,只有您的数据库拥有信息,您无法破解 cookie(例如添加一个)。

【讨论】:

  • 显然是基于技术优势的最佳答案 ;-)(我不是反对者)
  • @jahroy 我多年来一直在研究 cookie!
  • @Hogan 它显示了!杰克 - cookie 的目的不是为了安全,所以要小心你在其中存储的内容(即用户名和密码)
  • @nick - 我总是对巧克力片进行哈希和加密。
  • @nick:除非您使用 HTTPS,否则没有其他东西是安全的。只有 cookie 比表单中的 POST 参数更频繁地通过网络发送,因此更容易嗅探。
【解决方案4】:

您可以在问题的第二部分使用encodeURI('some text to encode')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2018-07-19
    • 2021-05-25
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    相关资源
    最近更新 更多