添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在一个网站上, 各种信息将会从一个页面带到另外一个页面. 一个熟习的例子就是购物车中已经选择的产品在各个页面中传递.

HTTP协议不会保留任何信息(它被称为无状态的). 因此, 为了保留这些信息需要某种机制. 这个机制称之为 会话(Session) , 它由框架或者语言提供.

  • 此外, 从另外一种意义上说, 还有这样的例子, 网站的用户进行在离开网站前进行”一系列的通信”.
  • 给会话(Session)增加数据

    要给会话(Session)增加数据, 可这样做:

     session().insert("name", "foo");
     session().insert("index", 123);
    

    在操作(action)中访问会话(Session), 我们也可以这样写:

     session()["name"] = "foo";
     session()["index"] = 123;
    

    从会话(Session)中读取数据

    可以这样从会话(Session)中读取数据:

     QString name = session().value("name").toString();
     int index = session().value("index").toInt();
    

    我们也可以这样写:

     QString name = session()["name"].toString();
     int index = session()["index"].toInt();
    

    设置会话(Session)的保存位置

    到目前为止, 会话可以看成是一个键值对的”联合数组(Hash)”, 这些数据表现为字符串形式. 会话本身是一个对象, 为了在页面间携带这些信息, 我们需要将信息保存在某个地方.

    在Treefrog框架内, 你可以选择一个文件, 数据库(RDB SQlObject), cookies作为会话内容的保存位置. Session类已经实现这些功能. 存储类型在apliction.ini中设置.

    设置用Cookies保存会话(Session)

    如果喜欢用Cookies保存, 可以简单的写成:

     Session.StoreType=cookie
    

    通过保存cookies, 会话的内容将会保存在客户端(浏览器), 在你允许的情况下, 用户还可以获得这些内容. 信息不应该显示给用户的, 应该保存在服务器(例如, 数据库RDB). 作为规则, 你应该仅将最小的必要信息保存在会话(Session)中.

    设置用文件保存会话(Session)

    如果你希望设置一个cookie保存文件, 可以简单的写成这样(会话文件将持续的写如应用程序根目录下的tmp文件夹内):

     Session.StoreType=file
    

    如果应用服务器(AP server)并行运行在多个机器上, 这种方法用得不多. 因为从用户来的请求不会总是指向同一个应用服务器(AP server)上, 使用会话文件保存需要一个共享文件服务器. 再者, 为了正确安全的操作, 文件锁机制也是需要的.

    设置用数据库RDB保存会话(Session)

    前提条件是, database.ini文件已经设置好了数据库信息.
    为了保存会话(Session)到数据库RDB, 需要一张表. 因此, 按下面的方法用SQL语句在数据库中创建’session’表: MySQL范例:

     > CREATE TABLE session (id VARCHAR(50) PRIMARY KEY, data BLOB, updated_at TIMESTAMP);
    

    applicaiton.ini文件也应该修改

     Session.StoreType=sqlobject
    

    以上就是我们需要做的. 如果需要, 系统可以保存会话(Session)的其他信息到数据库.

    会话(Session)的生命周期

    会话的有效期(用秒计算)设置在配置文件的Session.Lifetime. 如果超过失效日期, 会话信息将被擦除或者销毁. 此外, 可以指定为0, 表示只要浏览器一直运行, 会话信息就有效. 这种情况下, 当浏览器关闭后会话信息被销毁.

    每个浏览器分配一个会话. 每个不同的电脑有不同的会话, 并且同一台电脑上不同的浏览器有不同的会话.

    框架持续监控会话并给每个会话分配一个数字.

    一个唯一的ID(很难猜测)将会分配给每个会话(Session). 这个ID以cookie的形式在浏览器内存储, 然后附加在HTTP请求上发送, 直到超过失效日期. 框架然后从存储位置根据ID找到会话(Session)信息.