next up previous contents index
Search Next: Miniprojekt: Header und Cookies Up: CGI-Skripte mit Ruby Previous: Tabellen   Contents   Index


Cookies und Sessions

Mit Cookies können auf dem Client-PC Daten gespeichert werden. Sie werden der out-Methode als benannter Parameter übergeben.

cookie1 = CGI::Cookie::new(
  "name" => "name", 
  "value" => "value"
)
cookie2 = CGI::Cookie::new(
  "name"    => "name",
  "value"   => ["value1", "value2", ...],
  "path"    => "path",   # optional
  "domain"  => "domain", # optional
  "expires" => Time.now, # optional
  "secure"  => true      # optional
)

cgi.out({"cookie" => [cookie1, cookie2]}){
  "HTML-Seite"
}

Vorhandene Cookies stehen in der cookies-Hashtabelle zur Verfügung und können nach Bedarf manipuliert werden.

require "cgi"
cgi = CGI.new

# auf Cookies zugreifen
name_cookie = cgi.cookies['name']
alle_namen = cgi.cookies.keys

# Gültigkeit verlängern
for name, cookie in cgi.cookies
  cookie.expires = Time.now + 30
end

Sessions dienen wie Cookies dazu, Informationen zwischen verschiedenen Seitenaufrufen entweder im RAM oder auf der Festplatte zu speichern.

require "cgi"
require "cgi/session"

cgi = CGI.new("html3")
s = CGI::Session.new( cgi,
  "session_key" => "user",
  "session_id"  => "12345",
  "new_session" => true,
  "prefix" => "session.")
s["Nr"] = "007"
s["Name"] = "Bond, James"

cgi.out{
 cgi.html{
  "Nr. #{s['Nr']} heißt #{s['Name']}"
}}

Hier wird im temporären Verzeichnis eine Datei session.12345 angelegt, in der die eigentlichen Informationen gespeichert werden. Die Kennnummer der Sitzung wird in einem Cookie an den Client gesendet. Beim nächsten Besuch erhält der Server diese Sitzungsnummer zurück und kann aus der oben genannten Datei die Kundendaten wieder herstellen.

require "cgi"
require "cgi/session"

cgi = CGI.new("html3")
s = CGI::Session.new( cgi,
  "session_key" => "user",
  "prefix" => "session.")
cgi.out{
 cgi.html{
  "Nr. #{s['Nr']} heißt immer noch #{s['Name']}"
}}



(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20