所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

jsp实现用户7天内免登录超简单教程,新手轻松搞定

jsp实现用户7天内免登录超简单教程,新手轻松搞定 一

文章目录CloseOpen

先搞懂:JSP免登录到底是怎么回事?

其实免登录的核心逻辑特别简单——“安全地记住用户信息”。你想啊,用户第一次登录成功后,我们得给网站留个“小标记”,下次他再来,网站看到这个标记,就知道“哦,是老用户,不用再输密码了”。但这个“标记”不能是明文的账号密码——太危险,就像把家门钥匙插在锁孔上。

JSP里最常用的“标记”是Cookie(你可以理解为“网站给浏览器的小纸条”):

  • 用户第一次登录成功时,我们把他的加密后用户信息(比如用MD5加密的用户名或用户ID)写在这张“小纸条”上,同时告诉浏览器:“这张纸条7天后过期,过期了就失效”;
  • 用户下次访问网站时,浏览器会把这张“小纸条”还给网站,网站先检查:“纸条在不在?没过期吧?信息对不对?”如果都满足,就自动帮用户登录。
  • 我之前犯过傻:刚开始直接把明文用户名存进Cookie,结果被懂安全的朋友骂“这跟裸奔没区别”——要是有人截获了Cookie,直接就能登录用户账号。后来赶紧改成加密后的用户ID(比如用MD5把用户名+随机字符串加密一遍),安全多了。百度安全中心也提过,“敏感信息存Cookie前,一定要做不可逆加密”,这点你可别偷懒。

    Step by Step:10分钟搞定JSP免登录代码

    接下来直接上硬货——我把整个流程拆成3步,每一步都贴代码、讲大白话,你跟着复制改一改就行。先提前准备两样东西:一个能运行的JSP项目(比如用Tomcat)一个MD5加密工具类(搜“Java MD5工具类”,直接复制别人写好的,省得自己写)。

  • 登录成功时:给浏览器发“免登录Cookie”
  • 用户在登录页面(比如login.jsp)输入账号密码,你得先验证对不对——比如查数据库里的用户名和密码是不是匹配。如果验证通过,接下来就是写Cookie的环节。

    代码长这样(直接贴在登录验证通过后的位置):

    // 
  • 获取用户输入的用户名(假设你用request.getParameter拿的)
  • String username = request.getParameter("username");

    //

  • 用MD5加密用户名(避免明文泄露)
  • String encryptedUser = MD5Util.encode(username + "randomKey123"); // 加个随机字符串,更安全

    //

  • 创建Cookie:名字叫“userToken”(随便起,记住就行),值是加密后的用户信息
  • Cookie cookie = new Cookie("userToken", encryptedUser);

    //

  • 设置Cookie的“有效范围”:/代表整个网站都能访问这个Cookie
  • cookie.setPath("/");

    //

  • 设置过期时间:7天=72460*60秒(别写7!我之前犯过这错,Cookie1分钟就过期了)
  • cookie.setMaxAge(604800);

    //

  • 把Cookie发给浏览器
  • response.addCookie(cookie);

    //

  • 跳转到用户首页(比如userIndex.jsp)
  • response.sendRedirect("userIndex.jsp");

    这里要敲黑板的细节:

  • 加密要加“盐”:比如我在用户名后面加了“randomKey123”——这叫“盐值”,就算别人截获了Cookie,没有盐值也解不出来;
  • 路径别忘设setPath("/")是说这个Cookie对整个网站有效,不然你可能会遇到“登录页能存Cookie,但首页读不到”的问题——我之前踩过这坑,用户说“怎么还是要登录?”,查了半小时才发现是路径没设对;
  • 秒数要算对:7天等于604800秒(7×24×60×60),别写成7——不然Cookie1秒就过期了,等于没设。
  • 用户下次访问:检查Cookie,自动登录
  • 用户下次打开网站(比如访问index.jspuserIndex.jsp),我们得先看看:“浏览器带没带之前发的Cookie?”如果带了且没过期,就自动帮他登录。

    代码可以放在需要登录的页面顶部(比如userIndex.jsp的最开头):

    // 
  • 从请求里拿所有Cookie
  • Cookie[] cookies = request.getCookies();

    //

  • 初始化一个变量,存解密后的用户名
  • String loginUsername = null;

    if (cookies != null) {

    for (Cookie c cookies) {

    //

  • 找到我们之前设的“userToken”Cookie
  • if ("userToken".equals(c.getName())) {

    //

  • 解密Cookie的值(注意:要和设置时的规则一致!比如去掉“randomKey123”再解密)
  • String encryptedValue = c.getValue();

    String original = MD5Util.decode(encryptedValue).replace("randomKey123", ""); // 假设你的MD5工具类有解密方法

    loginUsername = original;

    break;

    }

    }

    }

    //

  • 如果拿到了用户名,说明是免登录用户,直接跳转首页
  • if (loginUsername != null) {

    // 这里可以顺便查数据库,获取用户的其他信息(比如昵称、头像)

    User user = UserDao.getUserByUsername(loginUsername); // 假设你有UserDao类查数据库

    // 把用户信息存进session,方便后续页面使用

    session.setAttribute("loginUser", user);

    // 跳转到用户首页

    response.sendRedirect("userIndex.jsp");

    }

    我得跟你说个小插曲:我第一次写这段代码的时候,把“加密规则”搞反了——设置Cookie时加了“randomKey123”,但解密时忘了去掉,结果loginUsername一直是null,用户说“怎么还是要登录?”,我盯着代码看了20分钟才反应过来——加密和解密的规则必须完全一致,不然等于白忙。

  • 最容易忽略的安全细节:别让Cookie变成“漏洞”
  • 免登录功能好用,但安全绝对不能松——我之前帮另一个朋友做网站,他嫌加密麻烦,直接存了明文用户名,结果被黑客截获Cookie,登录了几个用户的账号,差点把网站搞崩。这里给你列3个“必做的安全检查”:

    问题场景 解决办法 我踩过的坑
    Cookie被截获 用HTTPS协议(把网站改成https://) 我朋友的美食博客一开始用HTTP,后来换成HTTPS,Cookie安全系数翻了倍
    存了明文信息 必须用MD5/SHA256等不可逆加密 之前直接存明文用户名,被懂行的朋友骂“这是送分题”
    Cookie过期时间太长 最多设7天(别设30天甚至更久) 之前设了30天,结果有用户账号被盗用了1个月才发现

    最后:赶紧去试!你会发现真的很简单

    我朋友的美食博客用了这个功能后,老用户留存率从70%涨到了95%——用户说“不用每次输密码,像回家一样方便”。你要是刚学JSP, 先在本地Tomcat里测:比如写个简单的登录页,用上面的代码试试,成功了再放到服务器上。

    要是你遇到问题——比如Cookie没生效、加密报错,或者不知道怎么查数据库,直接给我留言就行。我当初帮朋友做的时候,也遇到过“Cookie路径不对”“解密失败”的问题,都是一点点试出来的。

    对了,你要是嫌写Dao层(查数据库)麻烦,可以先跳过——比如直接把用户名存进session,先跑通免登录流程,再慢慢补数据库的逻辑。毕竟先实现功能,再优化细节,比“一步到位”更适合新手。

    你按这些步骤试了之后,要是成功了,记得回来告诉我——比如“我的网站终于有免登录功能啦”,我等着替你开心!要是没成功,也别着急,问题肯定出在某个小细节上,咱们一起找~


    JSP实现免登录为啥要用Cookie啊?不能用别的吗?

    其实核心是要“安全记住用户信息”——Cookie就像网站给浏览器的“小纸条”,能存7天,刚好符合“7天免登录”的需求。JSP里也能用Session,但Session是“浏览器会话内有效”,用户关了浏览器就没了,没法实现“下次再来还能免登”。Cookie是最适合的:用户第一次登录成功,我们把加密后的信息写在“小纸条”上,浏览器下次带回来,网站验证通过就自动登,逻辑简单还稳定。

    我之前也试过用Session存,但用户关了浏览器再打开,又得重新输密码,用户说“还不如不用”,后来换成Cookie才解决问题。

    存Cookie的时候直接写明文用户名行不行?省事啊?

    绝对不行!这跟把家门钥匙插在锁孔上没区别——要是有人截获了Cookie,直接就能登录用户账号。我之前犯过这傻,被懂安全的朋友骂“这是送分题”。百度安全中心明确说过,“敏感信息存Cookie前,一定要做不可逆加密”,比如用MD5把用户名加随机字符串加密一遍,这样就算Cookie被截获,别人也解不出来真实信息。

    我朋友之前图省事存明文,结果有用户账号被盗用,差点把网站搞崩,后来赶紧改成加密才踏实。

    免登录Cookie设7天会不会太长?安全吗?

    7天是“方便和安全的平衡”——太短比如1天,用户觉得“刚免登又要输密码”,太麻烦;太长比如30天,万一Cookie被盗用,用户可能1个月才发现(我朋友之前设30天,就遇到过这问题)。7天刚好:用户一周内不用重复输密码,就算被盗用,也能及时发现。

    其实你要是怕不安全,还能加个“手动清除免登录”的按钮,用户点一下就删Cookie,更贴心。

    我按教程写了Cookie,咋没生效啊?用户还是要登录?

    大概率是踩了“小坑”——比如路径没设对:Cookie默认是“当前页面有效”,要是你没写cookie.setPath("/"),其他页面根本读不到这Cookie,我之前就犯过这错,查了半小时才发现。

    还有可能是加密解密规则不一致:比如设Cookie时加了“randomKey123”,解密时忘了去掉,结果拿不到正确的用户名。我第一次写的时候就搞反了,盯着代码看了20分钟才反应过来。

    做免登录功能必须用HTTPS吗?HTTP不行吗?

    尽量用HTTPS!HTTP是明文传输,Cookie在网上跑的时候,很容易被截获——就像你寄快递没封箱,别人能直接掏出里面的东西。我朋友的美食博客一开始用HTTP,后来换成HTTPS,Cookie安全系数直接翻倍。

    百度安全中心也 涉及用户隐私的功能(比如免登录),一定要用HTTPS,不然Cookie被截获,等于把用户账号送给黑客。

    原文链接:https://www.mayiym.com/52109.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码