Ruby CGI Sessions

  CGI::Session 可以为用户和CGI环境保存持久的会话状态,会话使用后需要关闭,这样可以保证数据写入到存储当中,当会话完成后,你需要删除该数据。

  #!/usr/bin/ruby

  require 'cgi'

  require 'cgi/session'

  cgi = CGI.new("html4")

  sess = CGI::Session.new( cgi, "session_key" => "a_test",

  "prefix" => "rubysess.")

  lastaccess = sess["lastaccess"].to_s

  sess["lastaccess"] = Time.now

  if cgi['bgcolor'][0] =~ /[a-z]/

  sess["bgcolor"] = cgi['bgcolor']

  end

  cgi.out{

  cgi.html {

  cgi.body ("bgcolor" => sess["bgcolor"]){

  "The background of this page" +

  "changes based on the 'bgcolor'" +

  "each user has in session." +

  "Last access time: #{lastaccess}"

  }

  }

  }

  访问 "/cgi-bin/test.cgi?bgcolor=red" 将跳转到指定背景颜色的页面。

  会话数据存在在服务器的临时文件目录中,prefix 参数指定了会话的前缀,将作为临时文件的前缀。这样你在服务器上可以轻松的识别不同的会话临时文件。

  CGI::Session 类

  CGI::Session 保持了用户与 CGI 环境的持久状态。 会话可以在内存中,也可以在硬盘上。

  类方法

  Ruby 类 Class CGI::Session 提供了简单的方法来创建 session:

  CGI::Session::new( cgi[, option])

  启用一个新的 CGI 会话并返回相应的 CGI::Session 对象。选项可以是可选的哈希,可以是以下值:

  session_key: 键名保存会话 默认为 _session_id。

  session_id: 唯一的会话 ID。自动生成

  new_session: 如果为true,为当前会话创建一个新的Session id。 如果为 false, 通过 session_id 使用已存在的 session 标识。 如果省略该参数,如果可用则使用现有的会话,否则创建一个新的。

  database_manager: 用于保存 sessions 的类,可以是 CGI::Session::FileStore or CGI::Session::MemoryStore。默认为 FileStore。

  tmpdir: 对于 FileStore, 为 session 的错存储目录。

  prefix: 对于 FileStore, 为 session 文件的前缀。

  实例化方法

  序号方法描述

  1[ ]

  返回给定 key 的值。查看实例。

  2[ ]=

  设置给定 key 的值。 查看实例。

  3delete

  调用底层数据库管理的删除方法。对于 FileStore, 删除包含 session 的物理文件。 对于 MemoryStore, 从内存中移除 session 数据。

  4update

  调用底层数据库管理的更新方法。 对于 FileStore, 将 session 写入到磁盘中。 对于 MemoryStore则无效果。

  (编辑:雷林鹏 来源:网络)

雷林鹏分享:Ruby CGI Sessions的更多相关文章

  1. 雷林鹏分享:Ruby 循环

    Ruby 循环 Ruby 中的循环用于执行相同的代码块若干次.本章节将详细介绍 Ruby 支持的所有循环语句. Ruby while 语句 语法 while conditional [do] code ...

  2. 雷林鹏分享:Ruby CGI 编程

    Ruby CGI 编程 Ruby 是一门通用的语言,不仅仅是一门应用于WEB开发的语言,但 Ruby 在WEB应用及WEB工具中的开发是最常见的. 使用Ruby您不仅可以编写自己的SMTP服务器,FT ...

  3. 雷林鹏分享:Ruby CGI方法

    Ruby CGI方法 以下为CGI类的方法列表: 序号方法描述 1CGI::new([ level="query"]) 创建 CGI 对象.query可以是以下值: query: ...

  4. 雷林鹏分享:Ruby CGI Cookies

    Ruby CGI Cookies HTTP协议是无状态协议.但对于一个商业网站,它需要保持不同的页面间的会话信息. 如用户在网站注册过程中需要跳转页面,但又要保证之前填写的信息部丢失. 这种情况下 C ...

  5. 雷林鹏分享:Ruby Web Services 应用 - SOAP4R

    Ruby Web Services 应用 - SOAP4R 什么是 SOAP? 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范. ...

  6. 雷林鹏分享:Ruby 安装 - Windows

    Ruby 安装 - Windows 下面列出了在 Windows 机器上安装 Ruby 的步骤. 注意:在安装时,您可能有不同的可用版本. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 R ...

  7. 雷林鹏分享:Ruby 安装 - Unix

    Ruby 安装 - Unix 下面列出了在 Unix 机器上安装 Ruby 的步骤. 注意:在安装之前,请确保您有 root 权限. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 Ruby ...

  8. 雷林鹏分享:Ruby 命令行选项

    Ruby 命令行选项 Ruby 一般是从命令行运行,方式如下: $ ruby [ options ] [.] [ programfile ] [ arguments ... ] 解释器可以通过下列选项 ...

  9. 雷林鹏分享:Ruby 语法

    Ruby 语法 让我们编写一个简单的 Ruby 程序.所有的 Ruby 文件扩展名都是 .rb.所以,把下面的源代码放在 test.rb 文件中. #!/usr/bin/ruby -w puts &q ...

随机推荐

  1. Log4Net的简单使用

    在前面的随笔中,已经异常处理过滤器中,我们已经将获取到的错误信息写到队列中去,然后又单独的线程对队列中的错误信息处理,将错误信息输出到制定的文件中,但是如果我们需要改变需求,打算将错误信息输出到数据库 ...

  2. 词频统计 in office

    ROSTCM6 1. http://www.writewords.org.uk/word_count.asp 2. http://darylkinsman.ca/tools/wordfreq.shtm ...

  3. python基础===包的导入和__init__.py的介绍

    转自:https://www.cnblogs.com/botoo/p/8241522.html 调用同级目录: – src |– mod.py |– test.py 若在程序test.py中导入模块m ...

  4. mysql 数据操作 单表查询 group by 聚合函数 没有group by情况下

    聚合函数只能用在组里使用 #没有group by 则默认算作一组 取出所有员工的最高工资 mysql> select max(salary) from employee; +---------- ...

  5. JS事件常用事件

    oncontextmenu对象右击 举例1: <form id="form1" name="form1" method="post" ...

  6. Incorrect datetime value

    今天在开发库上给一个表添加字段时候,发现居然报错: root@DB 06:14:42>ALTER TABLE `DB`.` user` ADD COLUMN `status_mode` TINY ...

  7. C#检查文件是否被占用

    第一种方法: using System.IO; using System.Runtime.InteropServices; [DllImport("kernel32.dll")] ...

  8. 162. Find Peak Element(二分查找 )

      A peak element is an element that is greater than its neighbors. Given an input array where num[i] ...

  9. 2017ACM/ICPC Guangxi Invitational Solution

    A: A Math Problem 题意:给出一个n,找出有多少个k满足kk  <= n 思路: kk的增长很快,当k == 16 的时候就已经超过1e18 了,对于每一次询问,暴力一下就可以 ...

  10. ZOJ Monthly, January 2018 Solution

    A - Candy Game 水. #include <bits/stdc++.h> using namespace std; #define N 1010 int t, n; int a ...