如何在登录中创建记住我的函数而不使用javascript或jquery中的表单
我几乎完成了我的项目,但我的登录规范还没有100%完成记住我的功能尚未运行 HTML 我没有在此登录页面中使用表单。 规范是,当登录时选中复选框时,必须重新标记用户。一旦他注销,文本框应该是空的,当点击#signinId输入时,必须显示他的用户名 如果可能的话,应该是这样的: 问题1: 截图2: 非常感谢您的帮助。如何在登录中创建记住我的函数而不使用javascript或jquery中的表单,javascript,jquery,login,Javascript,Jquery,Login,我几乎完成了我的项目,但我的登录规范还没有100%完成记住我的功能尚未运行 HTML 我没有在此登录页面中使用表单。 规范是,当登录时选中复选框时,必须重新标记用户。一旦他注销,文本框应该是空的,当点击#signinId输入时,必须显示他的用户名 如果可能的话,应该是这样的: 问题1: 截图2: 非常感谢您的帮助。 提前感谢。当登录表单已用完时,选中复选框,如果已选中,则将登录表单数据(包括用户名和密码)存储在相关cookie中。下次用户访问页面时,您可以读取cookie,如果设置了cooki
提前感谢。当登录表单已用完时,选中复选框,如果已选中,则将登录表单数据(包括用户名和密码)存储在相关cookie中。下次用户访问页面时,您可以读取cookie,如果设置了cookie,请使用存储的数据填充表单 这把小提琴可以帮助你: 您可以使用以下链接了解如何在jquery中使用Cookie: 下面是一些代码,以进一步解释:
$(document).on(ready,function(){
fillByMemory()
$('button#sign').on('click',function(){
if($('#rememberChkBox').val()){
rememberMe();
}
doLogin();
});
});
function rememberMe(){
$.cookie('id',$('#signinId').val());
$.cookie('pass',$('#signinPwd').val());
}
function fillByMemory(){
if(!!$.cookie('id'))
$('#signinId').val($.cookie('id'));
if(!!$.cookie('pass'))
$('#signinPwd').val($.cookie('pass'));
}
这对我来说非常有效 您需要Jquery.cookie.min.js
$(function () {
if (localStorage.chkbox && localStorage.chkbox != '') {
$('#rememberChkBox').attr('checked', 'checked');
$('#signinId').val(localStorage.username);
$('#signinPwd').val(localStorage.pass);
} else {
$('#rememberChkBox').removeAttr('checked');
$('#signinId').val('');
$('#signinPwd').val('');
}
$('#rememberChkBox').click(function () {
if ($('#rememberChkBox').is(':checked')) {
// save username and password
localStorage.username = $('#signinId').val();
localStorage.pass = $('#signinPwd').val();
localStorage.chkbox = $('#rememberChkBox').val();
} else {
localStorage.username = '';
localStorage.pass = '';
localStorage.chkbox = '';
}
});
});
自动登录系统
“记住我”实际上不用于在登录表单上显示用户名和密码,因为任何浏览器都已提供此功能。但它的目的是当用户重新访问web时自动登录
要使自动登录系统不在cookie上存储登录凭证,需要添加存储userid和login_字符串的数据库表
在每个用户登录时插入/更新登录字符串
当用户使用RememberMe(按单选按钮)登录时,将登录字符串存储在cookie上
-------------------------------------------------------------------
id (ai) | userid | login_string (128 chars)
--------------------------------------------------------------------
1 | 1 | 86faabe4142269e2274df911a....
--------------------------------------------------------------------
2 | 2 | 013835e194d75c183dc914c9e....
登录字符串必须是唯一的字符串,并且可以通过以下方式创建:
$login_string = hash('sha512', $userid . $_SERVER['HTTP_USER_AGENT'] . time());
结果是一个唯一的128字符串长度
要在cookie上存储登录\u字符串,请执行以下操作:
if(isset(post('remember_me')) {
$cookie_name = 'user_str_session';
$cookie_value = $login_string;
setcookie($cookie_name, $cookie_value, time() + (86400 * 1), "/"); // one day example
}
下次用户关闭浏览器并重新访问web时(通常登录会话已过期),在第一次加载页面时,系统将找到登录字符串并返回用户ID。通过使用此用户ID,系统将创建用于自动登录的登录会话
示例脚本:
if(!isset($_SESSION['id'])) {
if(isset($_COOKIE['user_str_session'])) {
$user_string = $_COOKIE['user_str_session'] ;
$sql = "SELECT `userid` FROM `users_log` WHERE `string` =? ";
$query = $this->db->query($sql, $user_string);
$userid = $query->row()->userid;
if($userid) {
$_SESSION['id'] = $userid;
}
}
}
若要阻止公用计算机上的登录\u字符串,请通过删除cookie上的登录\u字符串来应用用户注销
function logout()
{
// remove cookie
setcookie("user_str_session", "", time() - 3600);
session_destroy();
redirect('/');
}
这只是创建自动登录系统的简要说明。实际上,您可以根据自己的风格和需求进行游戏。这里只需一个提示。。。您看到的自动填充来自浏览器。你可以看出是浏览器在操作这些输入字段,因为背景颜色发生了变化——在本例中是黄色。如果你在Chrome中保存了密码,它将始终是自动填充的,因为Chrome功能。要忽略要在页面上维护的用户名历史记录,您可以在输入框上使用
autocomplete=“off”
作为属性。我需要这个功能,这就是我需要实现的。但是没有浏览器的功能。哦,你会将密码存储在cookie中,真的吗?如果安全性很重要,你可以将来自服务器的令牌存储在cookie中。将密码存储在cookie中是不安全的。这应该是公认的答案,尽管我将以JavaScript格式实现这一点,但您所建议的原则都是完全合理的,与我之前的想法一致。我来证实我的怀疑。干得好,先生。
if(!isset($_SESSION['id'])) {
if(isset($_COOKIE['user_str_session'])) {
$user_string = $_COOKIE['user_str_session'] ;
$sql = "SELECT `userid` FROM `users_log` WHERE `string` =? ";
$query = $this->db->query($sql, $user_string);
$userid = $query->row()->userid;
if($userid) {
$_SESSION['id'] = $userid;
}
}
}
function logout()
{
// remove cookie
setcookie("user_str_session", "", time() - 3600);
session_destroy();
redirect('/');
}