SESSION是使用自带的
想实现的功能是
每张收货单同时只允许一个操作员进行操作
如果操作员A在对收货单001进行收货操作时,操作员B看得到收货单001,但无法对收货单001进行收货操作
如果操作员A的会话超时,或者手动退出对收货单001的收货操作,则操作员B可以对收货单001进行收货操作现在想到的就是在收货单表上添加一个字段SID,用来记录SESSION ID
如果SID为空,则允许操作
如果SID与当前SESSION ID一致,则允许操作
如果SID与当前SESSION ID不一致,则通过SID查询SESSION中对应的SESSION ID是否过期
  如果已经过期(或者不存在此SESSION ID),则用当前SESSION ID替换SID,允许操作
  如果未过期,则不允许操作现在就是不知道如何查询指定的SESSION ID是否过期
以前都是用数据库记录SESSION,数据库的话就简单了...第一次用PHP自带的SESSION管理,不知道该如何实现这功能...

解决方案 »

  1. session是有时间的(生命周期),当你存入数据库的时候将当前时间存起来,到时候判断的时候就对比当前时间与数据库中存的时间,这样就能知道session是否过期了没有
      

  2. 这样的话对数据库的操作就很频繁了,也就是每次操作都得更新收货单表的超时字段...
    这样的话还不如直接用数据库来管理SESSION...
      

  3. 收货单这个表里最好有一个时间字段
    将这个时间记录下来到页面里
    update之前,先根据这个时间加上主键判断数据库是否还有这条记录
    如果有的话,进行update操作,同时更改这个表的时间字段
    如果没有,就是别的操作员已经更新过了,提示就OK了如果有别的操作员同时操作的情况,就应该用行级锁,这样最保险
      

  4. 既然你已经保存了操作者的 SID
    那么只需要检查 session 临时文件的最后访问时间就可知道是否过期了
    涉及函数:
    session_save_path 取得 session 临时文件保存目录
    若为空则自行取得系统的领事文件目录session_cache_expire 取得 session 过期时间filemtime 取得文件上一次修改的时间session 临时文件名:'sess_' . SID
      

  5. session——服务器端存储状态
    cookie——客户端存储状态既然选择了cookie,就不要怕再和数据库打点交道。
      

  6. 原来还可以这样...
    但...如果启用了mm拓展呢??
    如果使用了mm拓展,貌似是直接记录在session_mm_apache2handler0.sem这个文件里的是不??貌似没发现类似sess_xxxxx的文件