利用cookie 账号密码 如何实现网站自动登录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用cookie 账号密码 如何实现网站自动登录相关的知识,希望对你有一定的参考价值。
知道自己网站的后台登陆地址,利用火狐取到cookie,我想实现在ie浏览器输入一网址就自动登录(即不用输入账号密码,就可以直接自动登录了)
网上有的说可以利用登录地址和cookie的拼接,但是不知道怎么拼接。
还有没有其他方式可以登录。(例如利用 账号 密码 登陆地址 cookie等的组合,实现输入网址自动登录)
'==================================
'=函 数 名:UserLogin(url)
'=功 能:会员登陆判断并自动登陆
'==================================
Sub UserLogin(url)
If Session("User_data")="" Then '判断是否已经登陆
s_CookiesName = check_Cookies("会员名称",Request.Cookies("Scs_Login_Info")("user_name")) '读取cookies 帐号
s_CookiesPassed = check_Cookies("会员密码",Request.Cookies("Scs_Login_Info")("user_passed"))'读取cookies 密码,经过md5加密的
If s_CookiesName<>"" And s_CookiesPassed<>"" Then
sql="Select * From [Scs_user] Where name='"&s_CookiesName&"' and password='"&s_CookiesPassed&"'"
Set Rs=Server.Createobject("adodb.recordset")
Rs.open Sql,Conn,1,1
If Rs.Eof And Rs.Bof Then '登陆失败
Response.Cookies("Scs_Login_Info")("user_name")=Empty
Response.Cookies("Scs_Login_Info")("user_passed")=Empty
Session("User_data")=""
Response.Redirect(url) '跳转到登陆页
Else '登陆成功
Session("User_data")=Rs("user_id")&"||"&s_CookiesName
End If
Rs.Close:Set Rs=Nothing
Else
Response.Redirect(url)'跳转到登陆页
End If
End If
End Sub
%> 参考技术A 思路:网站解析到对应程序index,index从cookie中读入用户名和密码,如果能成功读到,直接调转到首页homepage,如果读取不到,调转到登陆页面login追问
求一段类似代码
追答自己捉摸吧
Cookie实现记住密码自动登录功能
网站登录的时候一般会有一个“记住密码”或者“一周之内记住我”之类的勾选框,勾选之后指定时间内访问同一网站将不需要再次输入账号密码,很方便,如下图所示
原理很简单,如下
- 勾选复选框登录之后会传递一个开关值(on/off)给后台的登录方法(例如/login),以此为依据;
- 登录成功后,值为 on 时向客户端浏览器写入 Cookie 信息,包括用户名和密码(为安全计,可以更换或者加密要保存的信息);
- 再次访问站点时,读取浏览器传过来的 Cookie 信息并自动登录。
先看看登录方法
@RequestMapping("/login")
public String login(LoginModel login, HttpServletRequest req, HttpServletResponse res, Model model) {
//...
}
登录对象 LoginModel 用来接收登录参数,当然需要添加一个 rememberMe 的 Field 了
public class LoginModel {
//省略其他 Field
private String rememberMe;
//省略 getters & setters
}
对应于登录表单的同名属性
<div class="form-group">
<input id="rememberMe" name="rememberMe" type="checkbox" style="vertical-align:middle;"/>
<label for="rememberMe" style="vertical-align:middle;">记住我</label>
</div>
这样提交表单之后就可以正常接收到是否记住我的开关值了,然后后台方法需要这样处理:向客户端写入 Cookie
//省略验证用户名密码获取用户对象user的过程
if ("on".equals(login.getRememberMe())) {
Tools.addCookie(res, Constant.SESSION_USER_NAME, user.getUserName(), Integer.MAX_VALUE);
Tools.addCookie(res, Constant.SESSION_PASSWORD, user.getPassword(), Integer.MAX_VALUE);
}
addCookie() 方法:
public static void addCookie(HttpServletResponse res, String key, String value, int age) {
Cookie cookie = new Cookie(key, value);
cookie.setMaxAge(age);
//更多设置请参考 API 文档
res.addCookie(cookie);
}
登录完可以在浏览器查看是否成功的写入了 Cookie ,打开 firebug 在控制台输入 document.cookie就可以看到了
Cookie 设置成功之后,下次登录时 Filter 就可以判断是否需要再次认证用户名和密码了,Filter 需要加上如下代码
//如果有cookie,用cookie登录
String userName = Tools.getCookie(req, Constant.SESSION_USER_NAME);
String password = Tools.getCookie(req, Constant.SESSION_PASSWORD);
if (userName != null && password != null) {
req.setAttribute("userName", userName);
req.setAttribute("password", password);
req.getRequestDispatcher("/login").forward(req, res);return;
}
getCookie() 方法:
public static String getCookie(HttpServletRequest req, String key) {
if (key == null || "".equals(key) || req == null) return null;
Cookie[] cookies = req.getCookies();
if (cookies == null || cookies.length == 0) return null;
for (Cookie cookie : cookies) {
if (cookie.getName().equals(key)) {
return cookie.getValue();
}
}
return null;
}
获取到 Cookie 的用户信息后,把userName 和 password 放入请求参数,使用 forward 自动登录,这个时候登录方法需要修改,特殊处理转发的登录请求
@RequestMapping("/login")
public String login(LoginModel login, HttpServletRequest req, HttpServletResponse res, Model model) {
HttpSession session = req.getSession();
login.setPassword(Tools.md5(Constant.MD5_PREFIX + login.getPassword()));
//如果转发的请求,关闭验证码,密码也不需要加密
if (req.getDispatcherType().equals(DispatcherType.FORWARD)) {
vcodeSwitch = false;
login = new LoginModel((String)req.getAttribute("userName"), (String)req.getAttribute("password"));
}
}
如果是转发的登录请求,需要特殊处理,比如关闭验证码验证、不用密码加密等等,保证能正常登录即可。
以上是关于利用cookie 账号密码 如何实现网站自动登录的主要内容,如果未能解决你的问题,请参考以下文章