利用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实现记住密码自动登录功能

网站登录的时候一般会有一个“记住密码”或者“一周之内记住我”之类的勾选框,勾选之后指定时间内访问同一网站将不需要再次输入账号密码,很方便,如下图所示

技术分享

原理很简单,如下

  1. 勾选复选框登录之后会传递一个开关值(on/off)给后台的登录方法(例如/login),以此为依据;
  2. 登录成功后,值为 on 时向客户端浏览器写入 Cookie 信息,包括用户名和密码(为安全计,可以更换或者加密要保存的信息);
  3. 再次访问站点时,读取浏览器传过来的 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 账号密码 如何实现网站自动登录的主要内容,如果未能解决你的问题,请参考以下文章

Cookie实现记住密码自动登录功能

python如何实现读取excel中账号密码后自动登录网页并实现固定操作?

跳转到另一个网页时自动登录

Cookie与Session

php 模拟 登录

thinkphp如何实现记住用户名,密码,自动登录