cookie和session

本文深入讲解了客户端技术Cookie和服务器端技术Session的工作原理、创建、获取及生命周期等内容,并提供了具体的代码示例。
cookie是客户端技术。程序把每个用户的数据以cookie形式写给用户的浏览器,浏览器可以存在缓存区或者用户的硬盘区。这样,当用户访问服务器的web资源时,就可以带着各自的数据去。我们访问某个网站时自动登录或者网站显示上次访问时间等可以通过cookie实现。
session是服务器端技术。服务器在运行时可以为每个用户的浏览器创建一个其独享的session对象,这样,可以把用户的数据放入session中,当用户浏览器再去访问服务器中的其他web资源时,可以通过session带着各自的数据区。我们注册时验证码的校检或购物时的购物车都可以通过session实现。
一、cookie。
(1)cookie的创建、发送、获取和删除。
创建:Cookie(String name, String value),cookie的构造函数,在创建cookie是传入cookie的名称和数据。setMaxAge(int expiry),设置cookie的有效时限,单位是秒,默认cookie有效期为浏览器进程,此时cookie存储在浏览器缓存区,浏览器关闭cookie就消失。 setPath(String uri) ,设置cookie的有效目录,比如设置有效目录为/news,那么浏览器访问news下的web资源都会带cookie,默认cookie由哪个servlet发出,有效路径即为servlet所在目录。
发送:response的addCookie(Cookie cookie)方法,只要在response里放入cookie,服务器在发现response里有cookie会自动发给浏览器。
获取:request的getCookies()方法会返回一个cookie数组,迭代数组就可去除想要的cookie。
删除:只要新的cookie的信息,包括名字、有效路径一致,并将时限设置为0,就会删除该cookie。
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

PrintWriter writer=response.getWriter();
writer.print("您上次访问的时间是:");

//获得cookie
Cookie[] cookies=request.getCookies();
for(int i=0;cookies!=null&&i<cookies.length;i++){
if(cookies[i].getName().equals("lastAccessTime")){
long lastAccessTime=Long.parseLong(cookies[i].getValue()+"");
Date date=new Date(lastAccessTime);
writer.print(date.toLocaleString())
}
}

//向cookie发送最新时间数据
Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+"");
cookie.setMaxAge(1*60*24*30);
cookie.setPath("/day20130928_servlet");
response.addCookie(cookie);

(2)cookie一些细节。
一个cookie只能标识一种信息,它至少含有该信息的名称和设置值。
一个web站点可以向一个web浏览器发送多个cookie,一个web浏览器也可以存储多个web站点的cookie。
删除cookie时,是将cookie的最大时限设置为0,注意path必须一致,否则无法删除。

二、session。
(1)session的创建、获取和生命周期。
创建、获取:request的getSession()方法再打一次被调用时服务器就会为浏览器创建一个session对象,而再次被调用时就会得到已创建的对象。需要注意的是有个getSession(boolean create)方法,可以限定是否创建session,如果传入false,那么就不创建session,只获取session,如果之前未创建session,也不再创建session,此方法可以在购物车是使用。
生命周期:getSession()方法第一次被调用时session被创建,而默认session对象在30分钟内未被调用将被销毁,即使30分钟内浏览器进程并未退出,当然也可能在session的invalidate()方法被调用时session摧毁。此时限可以通过web.xml配置更改,其时间单位分。
<session-config>
<session-timeout>10</session-timeout>
</session-config>

(2)session工作原理。
服务器为每个浏览器创建一个session对象,那它如何知道哪个session属于哪个浏览器呢?其实session技术依托于cookie技术,当session被创建后,服务器会向浏览器发送一个有session的id信息的cookie,这样,浏览器带着有session的id信息的cookie就能找到自己的session。当然如果没设置cookie的时限,默认是存在于整个浏览器进程,也就是浏览器关闭cookie就会销毁,那么即使没到session的销毁时限也不能找到浏览器上次访问的session。对此,我们可以通过更改cookie时限来延长session使用。比如做购物车,即使用户将浏览器关闭,只要在session摧毁前打开那么购物车内商品信息依然存在。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

HttpSession session= request.getSession();
//覆盖session的cookie
String sessionid=session.getId();
Cookie cookie=new Cookie("JSESSIONID",sessionid);
cookie.setPath("/day20130928_servlet");
//设置带有session的id信息的cookie时限
cookie.setMaxAge(1*60*30);
response.addCookie(cookie);
session.setAttribute("name", "Think Pad");
}

(3)cookie被禁时解决办法。
由于session依托于cookie,如果用户的cookie被禁用,那么即使服务器为浏览器创建了session,浏览器没有带有session的id信息的cookie,也无法使用属于浏览器的session,那么如果不解决,比如,一旦用户的浏览器由于某些原因被禁,对于卖家的网站,用户将无法购物,这样将对网站造成损失,解决办法就是可以依托超链接带session的id。可以调用response的encodeURL(String url)方法,它会自动在地址后带上session的id。不过需要注意的是,一旦浏览器关闭,那么在此访问将无法再次得到上次访问时的session,因为浏览器禁用cookie,带有session的id信息的cookie无法存在用户硬盘。

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer=response.getWriter();

//解决cookie被禁
request.getSession();

String url1=response.encodeURL("/day20130928_servlet/servlet/SessionDemo1");
String url2=response.encodeURL("/day20130928_servlet/servlet/SessionDemo2");

writer.print("<a href='"+url1+"'>购买</a>" );
writer.print("<a href='"+url2+"'>结账</a>" );
}
内容概要:本文是一份针对2025年中国企业品牌传播环境撰写的《全网媒体发稿白皮书》,聚焦企业媒体发稿的策略制定、渠道选择与效果评估难题。通过分析当前企业面临的资源分散、内容同质、效果难量化等核心痛点,系统性地介绍了新闻媒体、央媒、地方官媒自媒体四大渠道的特点与适用场景,并深度融合“传声港”AI驱动的新媒体平台能力,提出“策略+工具+落地”的一体化解决方案。白皮书详细阐述了传声港在资源整合、AI智能匹配、舆情监测、合规审核及全链路效果追踪方面的技术优势,构建了涵盖曝光、互动、转化与品牌影响力的多维评估体系,并通过快消、科技、零售等行业的实战案例验证其有效性。最后,提出了按企业发展阶段营销节点定制的媒体组合策略,强调本土化传播与政府关系协同的重要性,助力企业实现品牌声量与实际转化的双重增长。; 适合人群:企业市场部负责人、品牌方管理者、公关传播从业者及从事数字营销的相关人员,尤其适用于初创期至成熟期不同发展阶段的企业决策者。; 使用场景及目标:①帮助企业科学制定媒体发稿策略,优化预算分配;②解决渠道对接繁琐、投放不精准、效果不可衡量等问题;③指导企业在重大营销节点(如春节、双11)开展高效传播;④提升品牌权威性、区域渗透力与危机应对能力; 阅读建议:建议结合自身企业所处阶段发展目标,参考文中提供的“传声港服务组合”与“预算分配建议”进行策略匹配,同时重视AI工具在投放、监测与优化中的实际应用,定期复盘数据以实现持续迭代。
先展示下效果 https://pan.quark.cn/s/987bb7a43dd9 VeighNa - By Traders, For Traders, AI-Powered. Want to read this in english ? Go here VeighNa是一套基于Python的开源量化交易系统开发框架,在开源社区持续不断的贡献下一步步成长为多功能量化交易平台,自发布以来已经积累了众多来自金融机构或相关领域的用户,包括私募基金、证券公司、期货公司等。 在使用VeighNa进行二次开发(策略、模块等)的过程中有任何疑问,请查看VeighNa项目文档,如果无法解决请前往官方社区论坛的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得! 想要获取更多关于VeighNa的资讯信息? 请扫描下方二维码添加小助手加入【VeighNa社区交流微信群】: AI-Powered VeighNa发布十周年之际正式推出4.0版本,重磅新增面向AI量化策略的vnpy.alpha模块,为专业量化交易员提供一站式多因子机器学习(ML)策略开发、投研实盘交易解决方案: :bar_chart: dataset:因子特征工程 * 专为ML算法训练优化设计,支持高效批量特征计算与处理 * 内置丰富的因子特征表达式计算引擎,实现快速一键生成训练数据 * Alpha 158:源于微软Qlib项目的股票市场特征集合,涵盖K线形态、价格趋势、时序波动等多维度量化因子 :bulb: model:预测模型训练 * 提供标准化的ML模型开发模板,大幅简化模型构建与训练流程 * 统一API接口设计,支持无缝切换不同算法进行性能对比测试 * 集成多种主流机器学习算法: * Lass...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值