CGI::Session on mod_ruby

J

John Long

The following script is a simple page counter that works well for me running
as an rhtml file on mod_ruby:

<%
require 'cgi/session'

cgi = CGI.new('html4')

session = CGI::Session.new(cgi)

session['count'] ||= 0
session['count'] = session['count'].to_i + 1

# content must be output in this way in order for headers to be written:
cgi.out { "count: " + session['count'] }

session.close
%>

However, if I replace the line "cgi.out ..." with "puts session['count']"
the script fails incrediment indicating that a new session is being created
every time. I would assume this is because the right headers (cookies,
etc...) are not written out in the response. If you use CGI::Session are you
forced to use cgi.out rather than your own output method?
 
A

Ara.T.Howard

Date: Fri, 19 Dec 2003 02:43:38 +0900
From: John Long <[email protected]>
Newsgroups: comp.lang.ruby
Subject: CGI::Session on mod_ruby

The following script is a simple page counter that works well for me running
as an rhtml file on mod_ruby:

<%
require 'cgi/session'

cgi = CGI.new('html4')

session = CGI::Session.new(cgi)

session['count'] ||= 0
session['count'] = session['count'].to_i + 1

# content must be output in this way in order for headers to be written:
cgi.out { "count: " + session['count'] }

session.close
%>

However, if I replace the line "cgi.out ..." with "puts session['count']"
the script fails incrediment indicating that a new session is being created
every time. I would assume this is because the right headers (cookies,
etc...) are not written out in the response. If you use CGI::Session are you
forced to use cgi.out rather than your own output method?

from cgi/session.rb
....
# Most session state is maintained on the server. However, a session
# id must be passed backwards and forwards between client and server
# to maintain a reference to this session state.
#
# The simplest way to do this is via cookies. The CGI::Session class
# provides transparent support for session id communication via cookies
# if the client has cookies enabled.
#
# If the client has cookies disabled, the session id must be included
# as a parameter of all requests sent by the client to the server. The
# CGI::Session class in conjunction with the CGI class will transparently
# add the session id as a hidden input field to all forms generated
# using the CGI#form() HTML generation method. No built-in support is
# provided for other mechanisms, such as URL re-writing. The caller is
# responsible for extracting the session id from the session_id
# attribute and manually encoding it in URLs and adding it as a hidden
# input to HTML forms created by other mechanisms. Also, session expiry
# is not automatically handled.
....

that being said, you can always simply:

require 'cgi'
require 'cgi/session'
cgi = CGI.new
session = CGI::Session.new(cgi = CGI.new)
c = (session['count'] ||= 0)
printf "%s\ncount: %s\n", cgi.header, c
session['count'] = session['count'].succ
session.close


this is all CGI#out really does anyhow.


-a
--

ATTN: please update your address books with address below!

===============================================================================
| EMAIL :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
| PHONE :: 303.497.6469
| ADDRESS :: E/GC2 325 Broadway, Boulder, CO 80305-3328
| STP :: http://www.ngdc.noaa.gov/stp/
| NGDC :: http://www.ngdc.noaa.gov/
| NESDIS :: http://www.nesdis.noaa.gov/
| NOAA :: http://www.noaa.gov/
| US DOC :: http://www.commerce.gov/
|
| The difference between art and science is that science is what we
| understand well enough to explain to a computer.
| Art is everything else.
| -- Donald Knuth, "Discover"
|
| /bin/sh -c 'for l in ruby perl;do $l -e "print \"\x3a\x2d\x29\x0a\"";done'
===============================================================================
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,773
Messages
2,569,594
Members
45,119
Latest member
IrmaNorcro
Top