`
ajax_xu
  • 浏览: 155220 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

自动登录

 
阅读更多
一、什么是用户自动登录?
   对于我们的网站向已注册用户提供某些专门的服务,比如网上购物、在线下载、收费浏览等等,就会要求用户在使用这些服务之前进入登录页面,输入用户名和密码,并进行验证。
    如果用户经常访问我们的网站,假如每天都访问一次,或者好几次,那么用户每次都重复这些登录操作就会感到相当厌烦。通过一些简单的技术手段,我们可以让网 站“记住”那些在曾经登录过的用户。当该用户下次再来访问的时候,网站可以识别该用户,并为其自动完成登录过程。
二、基本思路
   作为网站的编写者,我们无从知道坐在电脑前的那个人是谁。我们能够知道的是,访问网站的是哪一台电脑——这一点可以通过Cookie实现。因此,对用户的识别实际上就是对客户端电脑的识别。
简单的说,当用户第一次登录网站的时候,网站向客户端发送一个包含有用户名的Cookie。当用户在之后的某个时候再次访问,浏览器就会向网站服务器回送这个Cookie,于是,我们可以从这个Cookie中读取到用户名,然后调用登录的方法,从而实现自动为用户登录。
三、防止欺骗
   Cookie只是一个普通的文本文件,那里面包含的字符串可以直接用记事本打开并进行编辑。因此任何人在任何电脑上都可以伪造一个包含有他人用户名 的 Cookie,从而实现对他人身份的冒用。要解决这个问题,就要在Cookie中附加一项信息,这个信息需要具有以下特性:1、和该用户一一对应;2、伪 造难度大。这些内容和用户名一起,以Cookie的形式发送给用户的浏览器。并且,服务器必须能够记住这项内容,以便用户再次访问的时候进行核对。
   理论上,可以使用该用户的密码。密码具备了前述的两个特点。但是因为Cookie本身未经加密,保存于其中的密码(应该加密)可以被任何人看到,因此这个方法极不安全。
   另一种可以加以利用的信息是用户访问时的Session id。因为Session id是一个由系统随机产生的、无规律的、长度较长的字符串,因此它很难被伪造。要把它和用户对应起来,我们需要在数据库中添加一个表,这个表至少有两个字 段,一个是用户名,一个是Session id。当用户首次登录的时候,我们把当前的Session id和用户名分别用Cookie发送给用户,同时,把这两项作为一条记录插入数据库。这样,当用户再次访问的时候,服务器就可以读取客户端发来的这两个 Cookie,并且用它们的值和数据库中的记录比对。如果在数据库中找到了相应记录,就说明这台电脑的确是该用户上次登录时使用的电脑,进而可以为该用户 自动登录。
四、实现
1、在登录页面中添加一个复选框,让用户选择是否愿意在一定时间内实现自动登陆,例如两周。
代码:
<input type="checkbox" name="autologin">两周内自动登录
2、在负责处理登录过程的Servlet中,判断用户是否选择了该复选框。如果是,则执行这两个操作:向用户发送两个Cookie,以及向数据库写入一条相应的记录。
代码:

Cookie ckUsername, ckSessionid;
if (autologin.equals("on")) {
// 如果用户选择了“两周内自动登录”,则向用户发送两个cookie。
// 一个cookie记录用户名,另一个记录唯一的验证码,
// 并将此验证码写入数据库,以备用户返回时查询。(防止伪造cookie)
ckUsername = new Cookie("autoLoginUser", user.getUsername()); // user是代表用户的bean
ckUsername.setMaxAge(60 * 60 * 24 * 14);   //设置Cookie有效期为14天
res.addCookie(ckUsername);
   sessionid = session.getId(); // 取得当前的session id
ckSessionid = new Cookie("sessionid", sessionid);
ckSessionid.setMaxAge(60 * 60 * 24 * 14);
res.addCookie(ckSessionid);
   // 在数据库中插入相应记录
userSessionDAO.insertUserSession(user, sessionid);
}
3、实现自动登录。因为用户下次访问的时候,可能直接访问网站的任何页面(例如通过收藏夹),而不一定是首页或者登录页面,所以我们需要用Filter拦截到达该网站的所有请求,并执行自动登录。
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession(true);
String username;
String sessionid;   // 此sessionid是上次用户登录时保存于用户端的识别码,用于用户后续访问的自动登录。不是本次访问的session id。
Cookie[] cookies;
CookieManager cm = new CookieManager(); // CookieManager是一个自定义的类,用于从Cookie数组中查找并返回指定名称的Cookie值。
boolean isAutoLogin;
   // 如果session中没有user对象,则创建一个。
User user = (User) session.getAttribute("user");
if (user == null) {
user = new User(); // 此时user中的username属性为"",表示用户未登录。
}
   // 如果user对象的username为"",表示用户未登录。则执行自动登录过程。
// 否则不自动登录。
if (user.getUsername().equals("")) {
// 检查用户浏览器是否发送了上次登录的用户名和sessionid,
// 如果是,则为用户自动登陆。
cookies = request.getCookies();
username = cm.getCookieValue(cookies, "autoLoginUser");
sessionid = cm.getCookieValue(cookies, "sessionid");
isAutoLogin = userSessionDAO.getAutoLoginState(username, sessionid); // 如果在数据库中找到了相应记录,则说明可以自动登录。
    if (isAutoLogin) {
user.setUsername(username);
user.setNickname(DBUtil.getNickName(username));
session.setAttribute("user", user); // 将user bean添加到session中。
}
}
chain.doFilter(req, resp);
}
4、注销。只有当用户在上次访问时,未经注销就离开网站,我们才能在该用户下次访问时执行自动登录。如果用户显式的执行了注销操作,那就表示该用户 不希望我们记住他。我们需要在执行注销操作的Servlet中,从数据库中删除相应记录。这样,下次用户访问的时候就不会执行自动登录了。
五、改进
用户可能为了方便,自行修改Cookie中的有效期,从而达到长期自动登录的目的。对某些存有敏感信息的网站来说,这样做并不安全。当用户长时间没有使用他的电脑,或者将电脑遗弃、转让了,而保存于其中的Cookie仍然是有效的,这就为用户和网站带来潜在的风险。
要解决这个问题,我们可以在数据库中增加一个字段,用以记录自动登录的过期日。这样,是否执行自动登录就不再以客户端的Cookie有效期为准,而 是以服务器端数据库中的信息为准。当我们想要调整用户自动登录的有效期的时候,只需要修改数据库中相应的日期字段即可,因而这一过程变得更加安全。

转载 http://hi.baidu.com/%B0%D9%CA%C2%BF%C9%BF%DA/blog/item/e71ae5b2b6f197aad8335a54.html

javascript 实现的自动登录

Cookie 网站或论坛的自动登录大多是采用cookie技术实现,很难吗。哈哈 跟我走 一点都不难
<o:p></o:p>
1.我们首先来看下cookie实现自动登录的原理。<o:p></o:p>
当用户登录后,通常可以选择多久不用再登录,这里就是cookie的有效期设置了,登录后 cookie会保存在本地硬盘中,当然这个我们不用去关心拉。然后当用户下次登录,系统会先去检测当前用户的cookie是否存在,存在的话则跳到相应页面,如果不存在则应该是在登录页面。原理的简单分析就是这样。简单吧。
<o:p></o:p>
2.接下来 我们瞧瞧js是怎样操作cookie的 跟我走。。<o:p></o:p>
还是直接帖代码吧 代码是我找的 不是自己写的,不清楚的话再找我。我再写一个简单点的。

js 代码
<script type="&lt;/span">"text/javascript">
//写cookies函数
function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值
{ var Days = 30;
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + Days*24*60*60*1000); //此 cookie 将被保存 30 天
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}// escape拿来干嘛?记住解决中文问题的。
//上面就算新定义了一个cookie
//取cookies函数
function getCookie(name)
{
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;
}
//删除cookie
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
SetCookie ("xiaoqi", "3")
alert(getCookie('xiaoqi'));
</script>
3.操作cookie学会了,还有什么难的呢。当用户打开这个网址的时候就去getcookie,你会说怎么去判断呢。这确实是个问题。不过 想解决还不简单。直接把所有的cookie取出来 循环 看是否有一个cookie等于上次登录的时候setcookie的名字,你可以把名字设置复杂点。可以直接判断是否有这个cookie名就完成了。原理就是这样。简单吧。跟我走 没错的。<o:p></o:p>
4.好啦。Set和get都学会了 还有什么难的呢 哎 实在有什么难的就找我拉。我是一个有责任心的男人 哈哈。<o:p></o:p>
5.最后还是帖下代码拉。我直接用jsp 判断 ,然后跳转。简洁些。看好了。<o:p></o:p>
jsp代码
login.jsp
<%
Cookie[] cookie = request.getCookies();
if(cookie!=null){
for(int i = 0; i < cookie.length; i++){
Cookie myCookie = cookie[i];
if(myCookie.getName().equals( "usercookie ")){
response.sendRedirect( "跳转到某用户的界面 ");
}}}%>
PS:“usercookie”是第一次登录的时候存入的cookie名。<o:p></o:p>
哈哈 就这样吧 !<o:p></o:p>
忘了写一点 跟我继续。。<o:p></o:p>
如果你不想用js 比如用java的话 存入cookie也是可以实现的。废话少说 我直接帖代码吧 程序员 一看就懂 呵呵
java 代码
Cookie usercookie=new Cookie( "usercookie ",user.getUsername());
usercookie.setMaxAge(24*60*60);
usercookie.setPath( "/koubeiTest/ ");
usercookie.setDomain( "www.lifeng.com ");
ServletActionContext.getResponse().addCookie(usercookie);

转载
http://littlefermat.blog.163.com/blog/static/59771167200927115722590/
分享到:
评论
1 楼 atgfss 2012-10-24  
采用在cookies中保存用户名和sessionid的这种方式是有问题的,如果A用户登录之后保存了cookies,B用户复制一份跟A用户一样的cookies,一样是可以登录的,只是B用户不知道A用户的密码而已,但对于B用户来说知道密码已不重要了,他已经越过用户密码验证这一环节了。所以你这种做法是不治本的

相关推荐

    热血江湖自动登陆易语言源代码

    通过对源代码的阅读和分析,可以了解易语言的语法结构,以及如何利用它实现网络通信和自动登录功能。同时,也可以借此理解游戏登录的基本流程和安全机制,对提升编程技能和了解游戏行业有一定的帮助。

    SAP 自动登录程序.exe

    4. **系统配置**: 实现SAP自动登录需要在SAP客户端和服务器端进行适当的配置,确保SAP GUI Scripting功能已启用,并且网络环境允许自动登录的执行。 5. **多系统和客户端管理**: 如果文件名为"系统1-客户端100",这...

    C#实现通过HttpWebRequest发送POST请求实现网站自动登陆

    本文将详细介绍如何使用C#中的`HttpWebRequest`来发送POST请求,并实现网站的自动登录。 #### 发送POST请求的基本步骤 1. **创建HttpRequest对象**:首先需要创建一个`HttpWebRequest`对象,并设置其URL地址。 2. ...

    易语言设置系统用户自动登陆

    在IT领域,尤其是在系统管理和自动化操作中,"易语言设置系统用户自动登录"是一个常见的需求。易语言,作为中国本土的编程语言,以其简洁的语法和面向初学者的设计,为开发者提供了实现这一功能的可能。这里我们将...

    开机自动登录软件 也能在自动登陆后锁定电脑

    【开机自动登录软件及其功能详解】 在日常使用电脑时,我们常常希望能够在开机后自动登录到系统,以节省时间并提高工作效率。优达 开机自动登录 1.4.8 正是这样一款软件,它专门设计用于实现这一功能。这款软件能够...

    XP系统自动登录器帮助用户自动登陆

    《XP系统自动登录器:实现高效便捷的系统登陆》 XP系统自动登录器是一款专为Windows XP操作系统设计的实用工具,旨在简化用户的登陆流程,让用户能够实现系统登陆的完全自动化。这款程序小巧轻便,仅有8.65KB,却能...

    简单的chrome插件,实现自动登录.

    本案例中,我们关注的是一个简单的Chrome插件,它的功能是实现自动登录。这个插件对于经常需要访问多个网站并记住用户名和密码的用户来说非常有用,它可以节省时间并提高效率。 首先,我们需要理解Chrome插件的基本...

    QQ自动登陆器(C#源码下载)

    QQ自动登陆器是一款基于C#编程语言开发的软件,它允许用户实现QQ账号的自动登录功能,节省了手动输入账号密码的时间,对于需要频繁登录QQ的用户来说非常方便。通过研究这款源码,开发者可以深入理解C#语言在网络编程...

    Radmin自动登陆器 v3.0 20150615

    为了安全高效地使用Radmin Viewer来自动登录和管理多台服务器,故编制RadminM (Radmin Connection Manager,Radmin自动登录器)。 v3.0版的可执行文件是RadminM.exe,一台电脑只能运行一个实例,再次运行只是将已运行...

    qq自动登录代码

    QQ作为中国最流行的即时通讯工具之一,其自动登录功能对于开发者和用户都有较高的实用价值。这篇文档将深入探讨如何使用VBScript(Visual Basic Script)实现QQ的一键自动登录和批量登录。 首先,我们需要理解...

    Win2k/XP系统自动登陆器

    4. **取消自动登录**:如果不再需要自动登录功能,可以通过再次修改注册表,将"AutoAdminLogon"键值设回0,同时清除或删除"DefaultUserName"和"DefaultPassword"值。也可以通过自动登陆器软件提供的相应选项来恢复到...

    qq自动登陆工具 一起登陆很多QQ

    从标签“qq自动登陆”我们可以推断,这个工具的核心功能是自动登录QQ账号,可能包含了一些安全机制来保护用户的登录信息,如加密存储等。同时,由于它可以同时处理多个QQ账号,所以也可能具备多账户管理的特性。 在...

    Fodera自动登陆脚本

    这样设置后,系统在启动时会读取该脚本并执行,从而实现自动登录功能。这个过程通常涉及到系统级别的配置,可能需要管理员权限来操作。 标签中的“Fodera”再次确认了这个脚本与Fodera系统相关,“自动登陆”表明其...

    使用批处理实现telnet自动登陆并执行ping命令

    本文将深入探讨如何使用批处理(BAT)脚本来实现通过telnet进行自动登录并执行ping命令,以此来远程检测网络连通性。这在监控服务器、网络故障排查或自动化测试场景下尤为常见。 首先,让我们理解一下涉及的三个...

    window自动登录脚本

    实现windows用户自动登录,喜欢自动化的可以尝试

    xp系统自动登录器

    "XP系统自动登录器"是一个针对Windows XP设计的工具,旨在帮助用户实现系统启动时的自动登录功能,从而省去了每次开机后手动输入密码的步骤。这对于家庭用户或者在特定应用场景下的商业用户来说非常方便,比如在无人...

    中国移动手机自动登陆注册源码

    至于压缩包内的“自动登陆”文件,这很可能是实现自动登录功能的核心代码文件。这个文件可能包含了登录逻辑、请求处理、身份验证以及与服务器通信的相关函数或类。开发者可以在这个基础上进行修改,以适应不同的服务...

    通达OA自动登陆代码(JDK6版)

    使用JDK6意味着这个自动登录代码兼容该版本的API和特性。 通达OA,全称是通达信协同办公系统,是中国市场上较为流行的企事业单位信息化管理软件之一。它提供了包括任务管理、文档管理、工作流、邮件等在内的多种...

    一个简单的telnet自动登录工具及源代码

    为了偷点懒,所以就弄了个telnet自动登录的软件. 软件功能: 1. 能自动telnet指定IP的电脑,并执行响应指令.设有重复链接机制.当对方电脑打开时,就能立刻链接上. 2. 软件中包含一个自定义脚本,用来设定telnet上机器时...

Global site tag (gtag.js) - Google Analytics