クッキーとセッションの原則

セッションの原則:

  セッションは、ファイル、メモリまたはデータベースに配置することができ、キーと値のペアの形式で格納されることができます。セッションはまた、財産権のキー値です。

  プログラムは、クライアントの要求のためのセッションを作成する必要がある場合、既にセッションIDが含まれている場合は、サーバーを最初にチェックがクライアントの要求は、セッションIDと呼ばれる、セッション識別子が含まれているし、以前にこれを行いますクライアントは、サーバーのセッションIDは、クライアントの要求は、セッションIDが含まれていない場合は、この顧客(取得されていない場合、getSeesion()メソッドのパラメータに応じて、新しいものでもよい)、このセッションを使用して取得に合わせて、あまりにもセッションを作成し、セッション終了を作成し、接続セッションIDにこれに関連するセッションを生成し、セッションIDは、このレスポンスに格納されているクライアントに返されます。

(セッションID方式保存、である)クライアントの実装形式のセッション

一般的なブラウザでは、保存するには、3つの方法が用意されています。

  [1] 保存するためにクッキーを使用します。これは、最も一般的な方法で、このアプローチに基づいて機能を実現する「レコードは私にはログイン」。サーバは、クッキーセッションIDを設定することによってブラウザに送信します。我々は有効期限を設定しない場合は、クッキーはハードディスクに保存されることはありません、ブラウザを閉じている時間は、クッキーが消え、セッションIDが失われます。私たちはこの時間を設定すると、クッキーは、ブラウザを閉じても、クライアントのハードドライブに保存され、値がまだそこにある、あなたがサイトを訪問する次回は、それはまた、サーバーに送信されます。

  [2] URLの書き換え、セッションIDは、直接私たちは、多くの場合、JSPのサイトはaaa.jspだろう?JSESSIONID = *同じ参照として、あるURLパスに追加されます。

  [3] 隠しフィールド増加内部Webフォームでは、このように第二の方法は、実際には同じであるが、POSTメソッドを使用してデータを送信するGETメソッドを介して元の送信データを、。しかし、明らかに後者はあまりにも面倒です。

  つまり、サーバーは自動的に、フォームを修正するフォームが送信されたときにセッションIDがサーバーにバックを渡すことができながら、隠されたフィールドを追加します。例えば:

1  < フォーム= "TESTFORM" アクションは= "/ XXX" > 
2  < 入力タイプ= "隠れた" 名前= "JSESSIONID" 
3  = "ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBug!-145788764" > 
4  < 入力タイプ= "テキスト" > 
5  </ フォーム>

セッションが作成されると?

  よくある間違いは、クライアントのアクセスがあった場合にセッションが作成されていることを考えることですが、実際には(サーブレットなど)プログラムの最後には、このような声明HttpServletRequest.getSession(真)時間呼び出すまで、サーバーが作成されないことです。

セッションは削除されたとき?

セッションは、次の場合に削除されます。

  A.呼び出すHttpSession.invalidate()

  クライアントは、セッション・インターバルのセッションIDを送信し、最後の時間から受信するB.最大有効時間を超え

  C.サーバプロセスが停止しています

  注ブラウザが再び閉鎖されていることだけで、サーバー側のセッションオブジェクトの失敗、クライアントブラウザのメモリ障害に保存されたセッションクッキーを作るません。

getSession()/のgetSession(真)、のgetSession(偽)的区别

  getSession()/のgetSession(真):セッションが存在する場合、セッションを返し、または新しいセッションを作成し、オブジェクトを返します。

  getSession(偽):セッションの存在は、それは、nullを返す新しいセッションを作成しないだろうというとき、セッションを返します。

 

クッキーのメカニズム:

クッキーの種類:

  1、方法であなたのハードディスクの空き容量に永久クッキーファイルがあります。永続的なCookieは、ユーザーがアクセスしたサイトは、ブラウザがローカルハードディスク上のサイトに関連付けられたクッキーを探します(一定の有効期限を設定)、クライアントのクッキー情報、のハードディスクに保存されています。クッキーが存在する場合、それはを通して、あなたのサイトにHTTPヘッダ情報を送信するために、ブラウザのページを要求されます、そして、システムは、一貫性のある各属性の比率とCookieの値であるとの情報がサーバ側に保存されています。そして、比較結果に応じて、「初めての訪問者」または「顧客」としてユーザーを識別します。

  2は、ブラウザの一時メモリでの滞在は、クッキーによって占められ、Internet Explorerを閉じたときにコンピュータから削除されます。

有効なクッキー:

  Cookie的maxAge决定着Cookie的有效期,单位为秒。

  如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。下面代码中的Cookie信息将永远有效。

1 Cookie cookie = new Cookie("username","helloweenvsfei");//新建Cookie
2 cookie.setMaxAge(Integer.MAX_VALUE);//设置生命周期为MAX_VALUE
3 response.addCookie(cookie);//输出到客户端

  如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为-1.

  如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除。

例如:

1 Cookie cookie = new Cookie("username","helloweenvsfei");//新建Cookie
2 cookie.setMaxAge(0);//设置生命周期为0,表示删除cookie
3 response.addCookie(cookie);//必须执行这一句

Cookie的组成部分

  Cookie在HTTP的头部信息中。

  标准格式:Set-Cookie:NAME=VALUE; Expires=DATE; Path=PATH; Domain=DOMAIN_NAME; SECURE;

  举例说明:Set-Cookie:JSESSIONID=mysession; Expires=Thu; 05-Jun-20 08 05:02:50 GMT; Path=/web;

  Cookie的Expires属性标识了Cookie的有效时间,当Cookie的有效时间过了之后,这些数据就被自动删除了。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命周期为浏览器会话期的cookie被称为会话cookie(临时性cookie),会话cookie保存在内存里。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。

Cookie被浏览器禁用怎么办?

cookie可以被人为地禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递会服务器。

  【1】URL重写,就是把session id直接附加在URL路径的后面,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。

  【2】在网页表单里面增加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过GET方法发送数据,后者使用POST方式发送数据。但是明显后者比较麻烦。

  就是服务器会自动修改表单,添加一个隐藏字段,一边在表单提交时能够把session id传递回服务器。比如:

1 <form name="testform" action="/xxx">
2 <input type="hidden" name="jsessionid"
3 value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBug!-145788764">
4 <input type="text">
5 </form>

 

Cookie 与 Session的区别

1、cookie数据存放在客户端,用来记录用户信息的,session数据放在服务器上。

2、正是由于Cookie存储在客户端中,对客户端是可见的,客户端的一些程序可能会窥探、复制甚至修改Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的危险。

  如果选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只有自己能读得懂。而如果选择Session就省事多了,反正是放在服务器上,Session里任何隐私都可以。

3、Session是保存在服务器端的,每个用户都会产生一个Session。如果并发访问的用户非常多,会产生非常多的Session,消耗大量的服务器内存。因此像Google、Baidu这样并发访问量极高的网站,是不太可能使用Session来追踪客户会话的。

  而Cookie保存在客户端,不占用服务器资源。如果并发浏览的用户非常多,Cookie是很好的选择。

4、cookie的容量和个数都有限制。单个cookie的容量不能超过4KB,很多浏览器都限制一个站点最多保存20个cookie,而session没有此问题。

5、所以建议:将登录信息等重要信息存放到SESSION中,其他信息如果需要保留,可以放在COOKIE中。

Session 和 Cache 的区别

  Session是但用户的会话状态。当用户访问网站时,产生一个SESSIONID。并存在于COOKIES中。每次向服务器请求时,发送这个COOKIES,再从服务器中检索是否有这个SESSIONID保存的数据。而cache则是服务器端的缓存,是所有用户都可以访问和共享的。因为从Cache中读数据比较快,所以有些系统(网站)会把一些经常被使用的数据放到Cache中,提高访问速度,优化系统性能。

如果有几千个session,怎么提高效率?(当session访问量比较大的时候,怎么解决?)

  把session放到redis或memcache等此类内存缓存中或把session存储到SSD硬盘上。

 

おすすめ

転載: www.cnblogs.com/HuiH/p/12621225.html