feitian

2011年4月23日 #

Cookie 和session 的区别 (转自http://www.cnblogs.com/chy8219/articles/1223533.html)

session与cookie的区别(转自http://www.cnblogs.com/chy8219/articles/1223533.html
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。

服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。

可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID
,还有一个很长的二进制的字符串,是SessionID的值。

Cookie是客户端的存储空间,由浏览器来维持。

在一些投票之类的场合,我们往往因为公平的原则要求每人只能投一票,在一些WEB开发中也有类似的情况,这时候我们通常会使用COOKIE来实现,例如如下的代码:
< % cookie[]cookies = request.getCookies();
if (cookies.lenght == 0 || cookies == null)
   doStuffForNewbie();
//没有访问过   
}

else
{
   doStuffForReturnVisitor(); //已经访问过了
}

% >



       这是很浅显易懂的道理,检测COOKIE的存在,如果存在说明已经运行过写入COOKIE的代码了,然而运行以上的代码后,无论何时结果都是执行doStuffForReturnVisitor(),通过控制面板-Internet选项-设置-察看文件却始终看不到生成的cookie文件,奇怪,代码明明没有问题,不过既然有cookie,那就显示出来看看。
cookie[]cookies = request.getCookies();
if (cookies.lenght == 0 || cookies == null)
   out.println("Has not visited this website");
}

else
{
   for (int i = 0; i < cookie.length; i++)
   {
     out.println("cookie name:" + cookies[i].getName() + "cookie value:" +
         cookie[i].getValue());
   }
}


         运行结果:
cookie name:JSESSIONID cookie value:KWJHUG6JJM65HS2K6

为什么会有cookie呢,大家都知道,http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,我们叫做session cookie,以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到sessionid=KWJHUG6JJM65HS2K6之类的字符串。
         明白了原理,我们就可以很容易的分辨出persistent cookies和session cookie的区别了,网上那些关于两者安全性的讨论也就一目了然了,session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如session cookie安全了。
         通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session cookie和persistent cookie的结合我们就实现了跨窗口的session tracking(会话跟踪)。
         在一些web开发的书中,往往只是简单的把Session和cookie作为两种并列的http传送信息的方式,session cookies位于服务器端,persistent cookie位于客户端,可是session又是以cookie为基础的,明白的两者之间的联系和区别,我们就不难选择合适的技术来开发web service了。

posted @ 2011-05-12 19:38 飞天wfu 阅读(351) | 评论 (0)编辑 收藏

mysql数据库中插入中文错误

往mysql数据库中插入中文时显示错误,是数据库的字符集问题。
      将mysql默认字符集设置为utf8  ,
      然后修改mysql安装目录下的my.ini文件:
             [client]下的default-character-set=gbk;
             [mysqld]下的default-character-set=utf8;
      重启mysql服务,问题解决!

posted @ 2011-04-24 12:08 飞天wfu 阅读(153) | 评论 (0)编辑 收藏

各种排序算法java实现 (转自http://duketian.blog.chinajavaworld.com/entry/3852/0/)

     摘要:   1 package org.rut.util.algorithm.support;   2     3 import org.rut.util.algorithm.SortUtil;   4 /**   5 ...  阅读全文

posted @ 2011-04-24 12:04 飞天wfu 阅读(206) | 评论 (0)编辑 收藏

【转】 myeclipse常用设置(转)

转载自 chssheng2007
最终编辑 chssheng2007
设置工作空间的项目编码, 防止出现乱码
   Window - Preferences - General - Workspace
   将"Text file encoding"选为"Other" - "UTF-8"
    改变现有项目的编码的步骤: 右击项目属性, 选择"Text file encoding"的编码

设置其它文件的编码
    Window -> Preferences -> General -> Content Types
    将需要设置的文件设置编码, 最好统一设为UTF-8
    设置后, 如Javascript文件可正常显示中文

设置创建JSP页面时,将JSP的默认编码设为UTF-8

    Window -> Preferences -> MyEclipse -> Files and Editors -> JSP
    将"Encoding"选为"ISO10646/Unicode(UTF-8)

去掉格式化JSP时页面中的空行
   Window -> Preferences -> MyEclipse -> HTML -> HTML Source
    勾选"Clear all blank lines"

增强Eclipse的自动代码提示功能
    默认下, 只有按"."或"Alt + /"才出现代码提示功能, 不够强大, 作小小设置, 可将代码提示功能像VS的一样方便
    1. Window -> Preferences -> Java -> Editor -> Content Assist
    2. 将"Auto Activation triggers for java"设置为".abc"(默认是"."), 点"Apply"应用
    3. 导出目前的Eclipse配置文件: File -> Export -> General -> Perferences, 选择保存路径, 保存得到*.epf文件
    4. 用文本编辑器打开刚才保存的*.epf文件, 搜索".abc", 将".abc"部分改为
       ".abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ(," (以上为自动提示的触发字符,
       根据个人习惯设置), 保存此配置文件(个人觉得不太好用,容易出错)
    5. 导入此配置文件: File -> import -> General -> Perferences, 导入修改后的配置文件.

    第一个选项为反应时间,可设为100左右(默认200)

高亮类中同一引用的使用位置
   Window -> Perferences -> General - > Editors -> TextEditors -> Annotations
    选择"Occurrences",勾引"Text as" -> "Highlighted"(块高亮)或"Squiggles"(虚线)

Link with Editor
    打开类后, 自动在包管理器这里显示类的位置
  


取消Myeclipse的自动文件验证(卡傻的原因)
    Windows –> Perferences –>Myeclipse –> Validation
   保留manual(手动)部分,build下只留"classpath dependency Validator"

    手动验证: 右键文件 -> Myeclipse -> Run Validation

取消拼写错误检查
    我爱故意写错单词, 不需要系统帮我检查
    Windows –> perferences –> General –> Editors-> Text Editors -> Spelling
    去掉"Enable spell checking"勾选

关闭不需要的启动项
     MyEclipse:
    Windows –> Perferences–> General–> Startup and Shutdown

    我只保留了
  
  
    顺序下来:
    1, Tomcat6: 必备的...
    2, 内存监视器: 可以查看Myeclipse的使用内存, 我喜欢这工具(在菜单Myeclipse - Utilities - Show Heap Status打开)
    3, JSP Debug工具, 其实我也没用过, 怕有一天用到...
    4, 文件创建向导(个人经常用到)
    5, 向后兼容的意思吧, 怕有一天会用到, 但其实很少用, 可去掉
    6, 透视图, 应该可以去掉吧...

    其实就只用选择Tomcat6

关闭自动更新
    1, Eclipse:
      
Windows –> Perferences–> Install/Update -> Automatic Updates
        不勾选"Automatically find new updates and notify me"

    2, Myeclipse:
      
1)Windows –> Perferences–> MyEclipse... -> Community Essentials
      &nb sp; 不勾选"Search for new features at startup"
        2)
Windows –> Perferences–> MyEclipse... -> Maven4MyEclipse
       不勾选"Download repository index updates on startup"

posted @ 2011-04-23 12:05 飞天wfu 阅读(409) | 评论 (0)编辑 收藏