cookie与sseion区别:
1) cookie保存在客户端,session保存在服务端
2)cookie只能保管ascii字符串,session能存取任意类型数据,如:String、Integer、List、Map等,也能保管Java Bean乃至java类及对象,可以把session看成一个容器类
3)cookie对客户端是可见的,session对客户端是透明的
4)cookie的过期时间可以设为一个很大的数字,session依赖于名为jsessionid的cookie,其过期时间默许为-1,主要关闭浏览器就失效
5)每个用户都会产生一个session。加入并发用户多的时候会产生大量的session,耗费大量的服务器资源,cookie不会
6)cookie支持跨域名访问,session不行。
session工作原理:
1、创建Session
当用户访问到一个服务器,如果服务器启用Session,服务器就要为该用户创建一个SESSION,在创建这个SESSION的时候,服务器首先检查这个用户发来的请求里是否包含了一个SESSION ID,如果包含了一个SESSION ID则说明之前该用户已经登陆过并为此用户创建过SESSION,那服务器就按照这个SESSION ID把这个SESSION在服务器的内存中查找出来(如果查找不到,就有可能为他新创建一个),如果客户端请求里不包含有SESSION ID,则为该客户端创建一个SESSION并生成一个与此SESSION相关的SESSION ID。这个SESSION ID是唯一的、不重复的、不容易找到规律的字符串,这个SESSION ID将被在本次响应中返回到客户端保存,而保存这个SESSION ID的正是COOKIE,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
2、使用Session
在COOKIE被禁止时仍然能够把Session id传递回服务器。
一种技术叫做URL重写,就是把Session id直接附加在URL路径的后面一种是作为URL路径的附加信息,表现形式为:
http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;
另一种是作为查询字符串附加在URL后面,表现形式为:
http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
还有一种就是表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session id传递回服务器。
(3)作用
Session的根本作用就是在服务端存储用户和服务器会话的一些信息。典型的应用有:
1、判断用户是否登录 2、购物车功能。
cookie工作原理:
1)、创建Cookie
当用户第一次浏览某个使用Cookie的网站时,该网站的服务器就进行如下工作:
①该用户生成一个唯一的识别码(Cookie id),创建一个Cookie对象;
②默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在磁盘上,则需要设置最大时效(maxAge);
③将Cookie放入到HTTP响应报头,将Cookie插入到一个 Set-Cookie HTTP请求头中。
④发送该HTTP响应报文。
2)、设置存储Cookie
浏览器收到该响应报文之后,根据报文头里的Set-Cookied特殊的指示,生成相应的Cookie,保存在客户端。该Cookie里面记录着用户当前的信息。
3)、发送Cookie
当用户再次访问该网站时,浏览器首先检查所有存储的Cookies,如果某个存在该网站的Cookie(即该Cookie所声明的作用范围大于等于将要请求的资源),则把该cookie附在请求资源的HTTP请求头上发送给服务器。
4)、读取Cookie
服务器接收到用户的HTTP请求报文之后,从报文头获取到该用户的Cookie,从里面找到所需要的东西。
作用:
Cookie的根本作用就是在客户端存储用户访问网站的一些信息。典型的应用有:
1、记住密码,下次自动登录。
2、购物车功能。
3、记录用户浏览数据,进行商品(广告)推荐。
缺陷:
①Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
②由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(除非用HTTPS)
③Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。
http和https
http:无状态,在http1.1之前无连接,使用文明通信,请求和响应不会对通信方进行确认、无法保护数据的完整性、简单快速灵活
https:基于http协议,通过ssl或者tls提供加密处理数据、需要CA申请证书验证对方身份以及数据完整性保护
**混合加密:**结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。
https实现原理:
1)client向server发送请求https://baidu.com,然后连接到server的443端口。
2)服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。
3)传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
4)客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(秘钥)。然后用证书对该随机值进行加密。
5)传送加密信息
这部分传送的是用证书加密后的秘钥,目的就是让服务端得到这个秘钥,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6)服务端加密信息
服务端用私钥解密秘密秘钥,得到了客户端传过来的私钥,然后把内容通过该值进行对称加密。
7)传输加密后的信息
这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。
8)客户端解密信息
客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容。