Cookie的使用(14)
一:cookie的简要介绍:
(1)什么是cookie
a、cookie是一种客户端的状态管理技术b、当浏览器向服务器发送请求的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。
(2)如何创建一个cookie
Cookie c = new Cookie(String name,String value);response.addCookie(c);默认情况下,cookie保存在浏览器内存中
(3)cookie的查询
Cookie[] cookie = request.getCookies();
注意:该方法有可能返回nullString cookie.getName():查找cookie的名字String cookie.getValue():查找cookie的值
(4)cookie的生存时间
cookie.setMaxAge(int seconds):cookie的保存时间seconds>0:浏览器会将cookie保存在硬盘上,超过指定时间会删除该cookieseconds<0:缺省值,只将cookie保存在内存中,只要浏览器不关闭,cookie就一致保存,浏览器一旦关闭,cookie就会被清空。seconds=0:立即删除cookie,如要删除一个叫userID的cookie,那么可以这么做:Cookiec = new Cookie("userID","");c.setMaxAge(0);response.addCookie(c);
(5)cookie的编码问题
cookie只能保存ascii字符,对于不合法的字符(如中文)需要转换成ascii码
例:Cookie cookie3 = new Cookie("realname",URLEncoder.encode("姓名","utf-8"));
(6)cookie的路径问题
a、什么是cookie的路径问题?浏览器在向服务器发送请求时,会比较cookie的路径要与访问的服务器的路径是否匹配,只有匹配的cookie才会发送给服务器。b、cookie的默认路径默认路径等于创建该cookie的组件路径c、匹配规则浏览器要访问的路径必须是cookie的路径或者其子路径时,才会发送对应的cookied、设置cookie的路径cookie.setPath(String path)如:cookie.setPath("/appname");这样保证这个cookie可以被整个web应用访问。
(7)cookie域
setDomain:设置cookie域,指的是访问某个域的时候,才会带入cookie,访问其他域,不会带入cookie。默认会禁止该设置,因为安全性较差,如,访问baidu.com,baidu.com写一个域是google.com的cookie,那么访问google.com的时候会带入baidu.com的cookie,从而会实现攻击的效果。
(8)cookie的限制
a、cookie可以被用户禁止b、cookie不完全,敏感数据,比如密码、账号等需要加密。c、cookie的大小有限制,大约为4K左右d、cookie的个数也有限制,大约是300个左右e、每个站点最多保存20个cookief、cookie只能够保存字符串。
二:用cookie实现三天免登陆:
创建cookie时的代码:(在第一次登陆时的用户检测的servlet上)
protected void service(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
resp.setContentType("text/html;charset=utf-8");
String uname=req.getParameter("username");
String password=req.getParameter("password");
Check ck=new Check();
User u=null;
try {
u=ck.check(uname, password);
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
if(u==null) {
req.getRequestDispatcher("Login").forward(req, resp);
//System.out.println("this is a test");
//resp.getWriter().write("用户名或密码错误");
}else {
Cookie c=new Cookie("uname",u.getUname());
c.setMaxAge(3*24*3600);
resp.addCookie(c);
resp.sendRedirect("Main");
}
} }
cookie检测代码:
protected void service(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
Cookie[] cks=req.getCookies();
String ckv=null;
User Uck=new User();
Check ck=new Check();
if(cks!=null) {
for(Cookie c:cks) {
if("uname".equals(c.getName())) {
ckv=c.getValue();
System.out.println(ckv);
}
}
try {
Uck=ck.check(ckv);
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} if(ckv==null){//检查ckv是否是空,排除只有键,没有值得情况。
resp.sendRedirect("Login");
}
if(Uck==null) {//检查Uck是否为空,排除在cookie有效期内,数据在数据库中被删除的况
resp.sendRedirect("Login");
}else {
resp.sendRedirect("Main");
}
}else {
req.getRequestDispatcher("Login").forward(req, resp);
}
} }
三:运行效果:
第一次登录时:
第二次登陆时:
源代码:
链接:https://pan.baidu.com/s/1SADXDyNFq-ICc4NXFEMJNw
提取码:95th
复制这段内容后打开百度网盘手机App,操作更方便哦
Cookie的使用(14)的更多相关文章
- cookie实现记住密码
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- [Google Code Jam (Qualification Round 2014) ] B. Cookie Clicker Alpha
Problem B. Cookie Clicker Alpha Introduction Cookie Clicker is a Javascript game by Orteil, where ...
- Google Code Jam 2014 资格赛:Problem B. Cookie Clicker Alpha
Introduction Cookie Clicker is a Javascript game by Orteil, where players click on a picture of a gi ...
- 解决Cookie乱码
在Asp.net的HttpCookie中写入汉字,读取值为什么全是乱码?其实这是因 为文字编码而造成的,汉字是两个编码,所以才会搞出这么个乱码出来!其实解决的方法很简单:只要在写入Cookie时,先将 ...
- C/C++ 笔试题
/////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...
- QQ浏览器X5内核问题汇总
原文:http://itindex.net/detail/53391-qq-浏览器-x5 常常被人问及微信中使用的X5内核的问题,其实我也不是很清楚,只知道它是基于android 4.2的webkit ...
- 原生JS--COOKIE
原生JS--COOKIE: COOKIE基础及应用:1.什么是COOKIE==>页面用来保存信息,比如:自动登录,记住用户名2.COOKIE的特性: --同一个网站中,所有的页面共享同一套co ...
- 转{QQ浏览器X5内核问题汇总}
转自https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/ 常常被人问及微信中使用的X5内核的问题,其实我也不是很清楚,只知道它 ...
- 微信、QQ浏览器X5内核问题汇总
一. 资料汇总 1.前端H5调起QQ浏览器的总结:http://km.oa.com/group/22486/articles/show/210189?kmref=search 2.Android We ...
- C/C++笔试题(很多)
微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...
随机推荐
- Jquery中小数取整
var uu=Math.floor(5.36) 向下取整 结果为5 var uu=Math.floor(5.88) 结果为5 Math.ceil(5.33) 向上取整,结果为6 Math.round( ...
- Vue+DataTables warning:table id=xxxx -Cannot reinitialize DataTable.报错解决方法
问题描述: 使用DataTables来写列表,用vue来渲染数据,有搜索功能,每次点击搜索就会报错,如下图所示. 问题排查: 找了一系列原因,最后发现是我每次请求完数据之后都会添加分页功能,从而导致了 ...
- python经典案例
前言:初学者对python的流程语句有一定的了解,但是运用起来总会磕磕碰碰.本文总结了一些初学者在学习python时做的经典案例 一.名片管理系统(限单个名片) info = {'name':'jam ...
- day50 盒子显隐2D形变
复习 1.浮动布局 解决block盒子同行显示 => 不完全脱离文档流 => 不再撑开父级高度 脱离文档流: 不在页面中占位(显示层次高于文档流) 不完全: 可以通过清浮动操作, 让子级重 ...
- Python人工智能第二篇
Python人工智能之路 - 第二篇 : 现成的技术 预备资料: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w ...
- 深度学习项目——基于循环神经网络(RNN)的智能聊天机器人系统
基于循环神经网络(RNN)的智能聊天机器人系统 本设计研究智能聊天机器人技术,基于循环神经网络构建了一套智能聊天机器人系统,系统将由以下几个部分构成:制作问答聊天数据集.RNN神经网络搭建.seq2s ...
- input控制输入保留一位小数
function zlip(obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除“数字”和“.”以外的字符 obj.val ...
- c/c++一维数组简单介绍
定义:同一种类型数据的集合 通俗的讲就是,将多个同一种类型的数据按一定的内存顺序写在一起. 注意我的几个关键字“多个”,“同一种”,“一定的内存顺序”.如果理解了这几个关键词,说明你的数组已经掌握了. ...
- linux上遇到tomcat报Out of Memory错误,导致jenkins崩溃的问题
今天遇到一个问题,就是JENKINS在同时部署两个前端应用时会出现崩溃的现象. 排查过程如下 查看tomcat-jenkins/bin/hs_err_pid27127.log发现: Out of Me ...
- laravel5增删改查
路由规则: 数据库配置: config/database.php laravel5/.env 控制器: 表单: 展示页面: 修改页面: