会话信息存储在表sessions中,在引导指令的DRUPAL_BOOTSTRAP_SESSION阶段,它将会话ID和Drupal用户ID关联了起来(关于Drupal引导指令处理流程的更多详细,请参看第15章)。事实上,在Drupal中广泛使用的$user对象,就是在本阶段使用includes/session.inc中的sess_read()函数初步建立的。($user对象是如何建立的,请参看第6章)。
表16-2给出了存储会话的数据库表结构:
表 16-2. Sessions表的结构
字段 类型 长度 描述
uid int 认证用户的用户ID(匿名用户为0)
sid int 64 由PHP生成的会话ID
hostname varchar 128 这个会话ID最后使用的IP地址
timestamp int 最后页面请求的Unix时间戳
cache int 用户最后发布的时间,用于执行最小缓存生命周期
session text big 存储在$_SESSION中的序列化数据
当Drupal提供一个页面时,最后一项工作就是将会话写入表sessions中(参看includes/session.inc里面的sess_write())。只有当浏览器提供了一个有效的cookie时,才这样做,这样就阻止了网络爬虫抓取页面时向表sessions中写入大量数据。
老葛的Drupal培训班 Think in Drupal