月度归档:2013年01月

书写sql时的注意事项


1.用like查询时,数据在1万条左右时,速度可以接受

2.在使用SUM函数时,在没有数值时会返回null(类型,不是字符类型)

3.关于replace

    1.replace虽然效果好用,但是速度不是最好的

     速度排名:

  1. 先update,再决定是否insert
  2. 直接replace
  3. 先select,再insert或update

Session 的 Time out 和有效设置 Session 时间限制


转自:http://hi.baidu.com/andylu1988/item/ec85e57da0ac493d6e29f6bf

php.ini 的关于 Session 的设置

① 是否要 cache ? ==> NO!

在 http 的 header 里面输出一些关于 session 的 cache(??对具体定义不是很清除) ,虽然这个和 Session 的 time out 没有什么直接的联系,但从历来的经验来讲,会出现一些很奇怪的现象,所以这里统一将 cache 关闭,使得 header 里面不出现 session 的信息。


; Set to {nocache,private,public,} to determine HTTP caching aspects

; or leave this empty to avoid sending anti-caching headers.

session.cache_limiter = nocache

; Document expires after n minutes.

session.cache_expire = 180


② 关于 garbage

; Define the probability that the ‘garbage collection’ process is started

; on every session initialization.

; The probability is calculated by using gc_probability/gc_divisor,

; e.g. 1/100 means there is a 1% chance that the GC process starts

; on each request.

session.gc_probability = 1

session.gc_divisor = 100

; After this number of seconds, stored data will be seen as ‘garbage’ and

; cleaned up by the garbage collection process.

session.gc_maxlifetime = 1440


这个设置是指:在 1440 秒后, Session 会被认作是 garbage (垃圾),而针对这些 garbage ,在每次连接(request),有 1/100 的几率(下文称为“清除几率”)来清除这些 garbage--当然,可以认为在 1440 秒后,平均通过进行 100 次的连接就会将 garbage session清除。

如果将以上的分子和分母都调整到 1, 那所有的 garbage session 将会在期限(session.gc_maxlifetime)过后的第一次 request 的时候被清除。但是这会大大加大对服务器的负荷,不建议使用。

③最后设置 session.cookie_lifetime


; Whether to use cookies.

session.use_cookies = 1

; Lifetime in seconds of cookie or, if 0, until browser is restarted.

; session.cookie_lifetime 以秒数指定了发送到浏览器的 cookie 的生命周期。

; 值为 0 表示“直到关闭浏览器”。默认为 0。

session.cookie_lifetime = 0




如果使用 cookie 在客户端保存 session 信息,这里可以设置 cookie 的有效时间。自己的理解是,在客户端的 cookie 里面保存有 Session ID,用来比较其有效期限。

现在做的项目使用 cookie 来保存用户信息,每当 session.cookie_lifetime 设置为 0 的时候,理所当然 IE 被关闭后每次都要重新登陆。但是当将此设置为一定的值后,在指定的秒数内重新打开该页面,仍旧保留以前的 cookie 数据并且自动登陆。留意点:

session.cookie_lifetime 设定为一个值 (例如 1000 秒)后,相应的 session.gc_maxlifetime 也需要设置为 1000 ,才能方便清除?

因 为测试过几次,将 session.cookie_lifetime 设置为较小的数值(例如 100秒)的时候,即使将“清除几率”变为 100% , 也不能在这个较小数值的时间内将 session 清除。因此怀疑是 session.gc_maxlifetime 设置了较大的一个值,使得系统需要更多的时间将 session 认定为 garbage, 即使这个 session 实质上已经过了它的 lifetime。 

几经测试,在统一了 session.cookie_lifetime 和 session.gc_maxlifetime 后, session 的定期清除效果比较好。

那么如何有效的限制 Session 的 Time out 呢?以下是两个众所周知的方案,仅作纪录。


将 Timestamp 放入 $_SESSION 中,每次 request 的时候对其值和现在值 now() 进行比较。如果时间间隔没有超出 Time Out 的期限,那么就将现在的时间 now() 赋值给 $_SESSION 中的纪录 timestamp 的部分。将 timestamp 放入 数据库中,每次 request 的时候对其值和现在值 now() 进行比较。如果时间间隔没有超出 Time Out 的期限,那么就将该用户的 session 纪录进行更新。