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>" );
}
C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值