【问题标题】:Using Cookie to set username and password via Javascript使用 Cookie 通过 Javascript 设置用户名和密码
【发布时间】:2014-01-01 07:28:35
【问题描述】:

我正在使用一个checkCookie函数来查看cookie中是否存在用户名和密码。我知道使用cookie不是一种安全的方法,但我只是在试用的基础上使用它,所以请宽容。 在第一次执行时,它会提示用户输入其用户名和密码,并使用setCookie(); 将其存储在 document.cookie 中,并且在重新执行代码时,它只会询问用户名并检查 cookie 以检索相应的密码。下面是我的 checkCookiefunction JS:-

function checkCookie() {
  var username = prompt("Please enter your name:", "");
  var password;
  if (flag == 0) { //flag=0 shows cookie is not set 
    password = prompt("Please enter your password:", "");
    username += "!";
    username += password;
    alert("Username = " + username);
    setCookie("username", username, 365); //save input in cookie
  } else //if cookie is already set with some username+password
  {
    var n = getCookie("username", username); //this retrieves the password from Cookie
    if (n) {
      alert("FLAG= 1 The user's password is " + n);
    } else
      alert("FLAG= 1  User password doesnot exist ")
  }
} //checkCookie function end

现在我对上面的代码有这些问题。

1) 我正在尝试使用一个标志变量,其值最初为 0,但是每当用户名存储在 Cookie 中时,标志值应该变为 1。在 C 中,我们可以通过声明一个静态变量标志来做到这一点,但是如何在 JS 中实现这一点?

2) 加上我完整的 Javascript 允许我获取与用户名对应的密码,我如何使用它来自动填写 gmail.com 网页密码字段上的密码字段?
如果我使用getElementByID("password").innerHTML = password,它会自动填写文档的密码字段吗?

3) 当我在 JSFiddle.net 上运行代码时,会保存用户名 cookie。但是当我刷新 JSFiddle.net 时,cookie 值会被重置!如何在页面重新加载时使我的 cookie 值持久(固定)?

期待一些好的建议。感谢阅读

【问题讨论】:

  • 你有什么样的后端?最好让会话代码处理密码。
  • 您不应该将用户名和密码存储为 cookie,这是不好的做法。相反,您应该创建一个登录页面,将会话令牌存储在数据库中并将其设置为 cookie,然后当用户拥有会话令牌 cookie 时,您只需将其与数据库中的令牌表进行比较。
  • 我正在尝试将此 javascript 与我的 Firefox 扩展程序一起使用,以便它可以存储密码并在按下 Firefox 扩展程序按钮时自动填充!我的下一个目标是制作一个跨浏览器的自动填充扩展。

标签: javascript cookies autofill


【解决方案1】:

您永远不应将用户名和密码存储为 cookie,即使它们已加密或散列,这是一种不好的做法,因为任何人都可能会过来检查用户的网络流量并窃取他们的身份。将用户名和密码存储为 cookie 基本上会将它们广播给任何可能正在查看的人。

相反,您应该创建一个登录页面,在您的数据库中存储会话令牌和用户的 IP 并将其设置为 cookie,然后当用户拥有您的会话令牌 cookie 时,您只需将其与用户的 IP 进行比较使用数据库中的令牌表来检查它们是否已登录。

如果同一个人出现并检查网络流量,他们将得到的只是会话令牌。当然,他们可能会使用它来窃取会话,但他们需要相同的 IP 地址。

这就是为什么网站在让用户修改帐户信息时也应该始终要求重新输入密码。

请参阅此Wikipedia article on Session Hijacking 以进一步阅读。

【讨论】:

  • 感谢您的回复。目前我只是在测试如何设置/获取 Cookie,当我打算将我的扩展商业化时,我会遵循会话令牌方法。您知道如何在我的问题第一部分中提到的 javascript 中使用静态变量吗?
【解决方案2】:

我会跳过讲座,给你你想要的:

document.getElementById("password").value = password;

似乎工作(在 jsfiddle 中测试)

【讨论】:

  • 谢谢。您知道如何在我的问题第一部分中提到的 javascript 中使用静态变量吗?
  • 我认为你可以像 checkCookie.password 或 checkCookie.flag 一样做
  • 我注意到在刷新网页时,我的“用户名”cookie 被删除了。我怎样才能保持它的价值?
  • 我可能是错的,但看起来您将 cookie 设置为在 6 分 5 秒后过期,或者可能在 epoch 后 365 秒后过期。 (我不经常做这种工作。)尝试将您的 cookie 过期时间设置为 time()+3000 或类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 2012-09-09
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多