You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rivet-dev@tcl.apache.org by lo...@mathematek.de on 2026/03/02 10:31:34 UTC

Rivet 3.2.8 session error

Hello everyone,

i try to get sessions working with rivet 3.2.8, tcl 8.6.17, apache  
httpd 2.4.65, tcllib 2.0

This is my simple test page session-test.rvt
####################start
<?
package require sqlite3
package require Session
package require DIO
::DIO::handle Sqlite DIO -db "/.../rivet-sqlite.db"
Session SESSION -debugMode 0
SESSION activate

#set current_user [SESSION fetch global user_name]

#if {[::rivet::var exists username]} {
# set l_user [::rivet::var get username]
# SESSION store global user_name $l_user
#} else {
# set l_user ""
#}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto; }
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<div>User:<? #puts $current_user ?></div>
<p>Welcome to xyz the next thing <br/>Session id: <? puts [SESSION id] ?\
> </p>
</body>
</html>
###################################end

The session works, until i let the session idle, if it tries to  
refresh the session i get this exception:
Got 'near "WHERE": syntax error' executing 'UPDATE rivet_session SET   
WHERE 1 = 1 AND session_id = '4662D98DF8C0E99F79EF68C925F2Exxx' AND  
ip_address = 'yyy''
     while executing
"$this update $arrayName {*}$args"
     (object "::DIO" method "::DIO::Database::store" body line 21)
     invoked from within
"$dioObject store a -table $sessionTable -keyfield $kf"
     (object "::request::SESSION" method "::Session::id" body line 70)
     invoked from within
"id"
     (object "::request::SESSION" method "::Session::activate" body line 9)
     invoked from within
"SESSION activate"
     (in namespace eval "::request" script line 8)
     invoked from within
"namespace eval ::request $script"
     ("::try" body line 12)

Can someone help me to fix this?
Is this an error with my setup or with rivet itselve?

Unfortunally i am not able to file a bug report, as the bug software  
shows me "new bugs for rivet have been disabled".

Thank you!


---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org


Re: Rivet 3.2.8 session error

Posted by Massimo Manghi <ma...@rivetweb.org>.
Hi Louis

My intention was to provide support in 3.3.0 only for the Tdbc connector 
class. I missed therefore the bug in dio_Sqlite.tcl

May I suggest to fix the problem in the traditional Tdbc connector by 
adding to dio_Sqlite.tcl these lines

public method create_field_formatter {} {
         set special_fields_formatter [::DIO::formatters::Sqlite3 
::DIO::formatters::#auto]
     }

Otherwise it would break the Tdbc connector

Since it seems you're using Rivet in a Tcl9 environment it would be nice 
if you keep reporting more problems and observations

  -- Massimo


On 3/2/26 14:00, louis.hoefler@mathematek.de wrote:
> Hello Massimo,
> the yyy is just obfuscated.
> 
> I enabled debugging and it fails with the message:
> debug "session '$sessionCookie' alive, refreshing session update time"
> Within the file rivet-master/rivet/packages/session/session-class.tcl 
> line 288
> 
> Your suggested approach with Tdbc did work like a charm.
> 
> So currently no need for me to fix this, as I try to wrap my head 
> arround it and try to fix it myselve.
> 
> I keep you updated.
> 
> In git-master (rivet-3.3.0) i had to change rivet-master/rivet/packages/ 
> dio/formatters.tcl line 142 from Sqlite3 to Sqlite to get the 
> traditional Sqlite connector working.
> 
> I compiled rivet-master with apache 2.4.65, tcl 9.0.3, tcllib 2.0
> 
> Quoting Massimo Manghi <ma...@rivetweb.org>:
> 
>> Hi Louis
>>
>> I guess the ip_address = 'yyy' is actually meant to conceal the actual 
>> address.
>>
>> I recommend you adopt the Tdbc connector for Sqlite3 creating the 
>> handle with the modified DIO::handle form
>>
>> ::DIO::handle Tdbc Sqlite3 -db "/.../rivet-sqlite.db
>>
>> after you have downloaded the latest version of dio_Tdbc.tcl from the 
>> repository. I spotted a bug in it that made the DIO result 'numrows' 
>> command fail
>>
>> https://github.com/apache/tcl-rivet/blob/3.2/rivet/packages/dio/ 
>> dio_Tdbc.tcl
>>
>> In case you want to stick to the traditional Sqlite connector please 
>> enable the debugging of the Session object instance and in case add 
>> more debug messages if it fails to show where it's failing to properly 
>> set the column updated values
>>
>>  -- Massimo
>>
>>
>> On 3/2/26 11:31, louis.hoefler@mathematek.de wrote:
>>>
>>> Hello everyone,
>>>
>>> i try to get sessions working with rivet 3.2.8, tcl 8.6.17, apache 
>>> httpd 2.4.65, tcllib 2.0
>>>
>>> This is my simple test page session-test.rvt
>>> ####################start
>>> <?
>>> package require sqlite3
>>> package require Session
>>> package require DIO
>>> ::DIO::handle Sqlite DIO -db "/.../rivet-sqlite.db"
>>> Session SESSION -debugMode 0
>>> SESSION activate
>>>
>>> #set current_user [SESSION fetch global user_name]
>>>
>>> #if {[::rivet::var exists username]} {
>>> # set l_user [::rivet::var get username]
>>> # SESSION store global user_name $l_user
>>> #} else {
>>> # set l_user ""
>>> #}
>>> ?>
>>> <!DOCTYPE html>
>>> <html>
>>> <head>
>>> <title></title>
>>> <style>
>>> html { color-scheme: light dark; }
>>> body { width: 35em; margin: 0 auto; }
>>> font-family: Tahoma, Verdana, Arial, sans-serif; }
>>> </style>
>>> </head>
>>> <body>
>>> <div>User:<? #puts $current_user ?></div>
>>> <p>Welcome to xyz the next thing <br/>Session id: <? puts [SESSION 
>>> id] ?\
>>>> </p>
>>> </body>
>>> </html>
>>> ###################################end
>>>
>>> The session works, until i let the session idle, if it tries to 
>>> refresh the session i get this exception:
>>> Got 'near "WHERE": syntax error' executing 'UPDATE rivet_session SET  
>>> WHERE 1 = 1 AND session_id = '4662D98DF8C0E99F79EF68C925F2Exxx' AND 
>>> ip_address = 'yyy''
>>>     while executing
>>> "$this update $arrayName {*}$args"
>>>     (object "::DIO" method "::DIO::Database::store" body line 21)
>>>     invoked from within
>>> "$dioObject store a -table $sessionTable -keyfield $kf"
>>>     (object "::request::SESSION" method "::Session::id" body line 70)
>>>     invoked from within
>>> "id"
>>>     (object "::request::SESSION" method "::Session::activate" body 
>>> line 9)
>>>     invoked from within
>>> "SESSION activate"
>>>     (in namespace eval "::request" script line 8)
>>>     invoked from within
>>> "namespace eval ::request $script"
>>>     ("::try" body line 12)
>>>
>>> Can someone help me to fix this?
>>> Is this an error with my setup or with rivet itselve?
>>>
>>> Unfortunally i am not able to file a bug report, as the bug software 
>>> shows me "new bugs for rivet have been disabled".
>>>
>>> Thank you!
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
>>> For additional commands, e-mail: rivet-dev-help@tcl.apache.org
>>>
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
> For additional commands, e-mail: rivet-dev-help@tcl.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org


Re: Rivet 3.2.8 session error

Posted by lo...@mathematek.de.
Hello Massimo,
the yyy is just obfuscated.

I enabled debugging and it fails with the message:
debug "session '$sessionCookie' alive, refreshing session update time"
Within the file rivet-master/rivet/packages/session/session-class.tcl line 288

Your suggested approach with Tdbc did work like a charm.

So currently no need for me to fix this, as I try to wrap my head  
arround it and try to fix it myselve.

I keep you updated.

In git-master (rivet-3.3.0) i had to change  
rivet-master/rivet/packages/dio/formatters.tcl line 142 from Sqlite3  
to Sqlite to get the traditional Sqlite connector working.

I compiled rivet-master with apache 2.4.65, tcl 9.0.3, tcllib 2.0

Quoting Massimo Manghi <ma...@rivetweb.org>:

> Hi Louis
>
> I guess the ip_address = 'yyy' is actually meant to conceal the  
> actual address.
>
> I recommend you adopt the Tdbc connector for Sqlite3 creating the  
> handle with the modified DIO::handle form
>
> ::DIO::handle Tdbc Sqlite3 -db "/.../rivet-sqlite.db
>
> after you have downloaded the latest version of dio_Tdbc.tcl from  
> the repository. I spotted a bug in it that made the DIO result  
> 'numrows' command fail
>
> https://github.com/apache/tcl-rivet/blob/3.2/rivet/packages/dio/dio_Tdbc.tcl
>
> In case you want to stick to the traditional Sqlite connector please  
> enable the debugging of the Session object instance and in case add  
> more debug messages if it fails to show where it's failing to  
> properly set the column updated values
>
>  -- Massimo
>
>
> On 3/2/26 11:31, louis.hoefler@mathematek.de wrote:
>>
>> Hello everyone,
>>
>> i try to get sessions working with rivet 3.2.8, tcl 8.6.17, apache  
>> httpd 2.4.65, tcllib 2.0
>>
>> This is my simple test page session-test.rvt
>> ####################start
>> <?
>> package require sqlite3
>> package require Session
>> package require DIO
>> ::DIO::handle Sqlite DIO -db "/.../rivet-sqlite.db"
>> Session SESSION -debugMode 0
>> SESSION activate
>>
>> #set current_user [SESSION fetch global user_name]
>>
>> #if {[::rivet::var exists username]} {
>> # set l_user [::rivet::var get username]
>> # SESSION store global user_name $l_user
>> #} else {
>> # set l_user ""
>> #}
>> ?>
>> <!DOCTYPE html>
>> <html>
>> <head>
>> <title></title>
>> <style>
>> html { color-scheme: light dark; }
>> body { width: 35em; margin: 0 auto; }
>> font-family: Tahoma, Verdana, Arial, sans-serif; }
>> </style>
>> </head>
>> <body>
>> <div>User:<? #puts $current_user ?></div>
>> <p>Welcome to xyz the next thing <br/>Session id: <? puts [SESSION id] ?\
>>> </p>
>> </body>
>> </html>
>> ###################################end
>>
>> The session works, until i let the session idle, if it tries to  
>> refresh the session i get this exception:
>> Got 'near "WHERE": syntax error' executing 'UPDATE rivet_session  
>> SET  WHERE 1 = 1 AND session_id =  
>> '4662D98DF8C0E99F79EF68C925F2Exxx' AND ip_address = 'yyy''
>>     while executing
>> "$this update $arrayName {*}$args"
>>     (object "::DIO" method "::DIO::Database::store" body line 21)
>>     invoked from within
>> "$dioObject store a -table $sessionTable -keyfield $kf"
>>     (object "::request::SESSION" method "::Session::id" body line 70)
>>     invoked from within
>> "id"
>>     (object "::request::SESSION" method "::Session::activate" body line 9)
>>     invoked from within
>> "SESSION activate"
>>     (in namespace eval "::request" script line 8)
>>     invoked from within
>> "namespace eval ::request $script"
>>     ("::try" body line 12)
>>
>> Can someone help me to fix this?
>> Is this an error with my setup or with rivet itselve?
>>
>> Unfortunally i am not able to file a bug report, as the bug  
>> software shows me "new bugs for rivet have been disabled".
>>
>> Thank you!
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
>> For additional commands, e-mail: rivet-dev-help@tcl.apache.org
>>




---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org


Re: Rivet 3.2.8 session error

Posted by Massimo Manghi <ma...@rivetweb.org>.
Hi Louis

I guess the ip_address = 'yyy' is actually meant to conceal the actual 
address.

I recommend you adopt the Tdbc connector for Sqlite3 creating the handle 
with the modified DIO::handle form

::DIO::handle Tdbc Sqlite3 -db "/.../rivet-sqlite.db

after you have downloaded the latest version of dio_Tdbc.tcl from the 
repository. I spotted a bug in it that made the DIO result 'numrows' 
command fail

https://github.com/apache/tcl-rivet/blob/3.2/rivet/packages/dio/dio_Tdbc.tcl

In case you want to stick to the traditional Sqlite connector please 
enable the debugging of the Session object instance and in case add more 
debug messages if it fails to show where it's failing to properly set 
the column updated values

  -- Massimo


On 3/2/26 11:31, louis.hoefler@mathematek.de wrote:
> 
> Hello everyone,
> 
> i try to get sessions working with rivet 3.2.8, tcl 8.6.17, apache httpd 
> 2.4.65, tcllib 2.0
> 
> This is my simple test page session-test.rvt
> ####################start
> <?
> package require sqlite3
> package require Session
> package require DIO
> ::DIO::handle Sqlite DIO -db "/.../rivet-sqlite.db"
> Session SESSION -debugMode 0
> SESSION activate
> 
> #set current_user [SESSION fetch global user_name]
> 
> #if {[::rivet::var exists username]} {
> # set l_user [::rivet::var get username]
> # SESSION store global user_name $l_user
> #} else {
> # set l_user ""
> #}
> ?>
> <!DOCTYPE html>
> <html>
> <head>
> <title></title>
> <style>
> html { color-scheme: light dark; }
> body { width: 35em; margin: 0 auto; }
> font-family: Tahoma, Verdana, Arial, sans-serif; }
> </style>
> </head>
> <body>
> <div>User:<? #puts $current_user ?></div>
> <p>Welcome to xyz the next thing <br/>Session id: <? puts [SESSION id] ?\
>> </p>
> </body>
> </html>
> ###################################end
> 
> The session works, until i let the session idle, if it tries to refresh 
> the session i get this exception:
> Got 'near "WHERE": syntax error' executing 'UPDATE rivet_session SET  
> WHERE 1 = 1 AND session_id = '4662D98DF8C0E99F79EF68C925F2Exxx' AND 
> ip_address = 'yyy''
>      while executing
> "$this update $arrayName {*}$args"
>      (object "::DIO" method "::DIO::Database::store" body line 21)
>      invoked from within
> "$dioObject store a -table $sessionTable -keyfield $kf"
>      (object "::request::SESSION" method "::Session::id" body line 70)
>      invoked from within
> "id"
>      (object "::request::SESSION" method "::Session::activate" body line 9)
>      invoked from within
> "SESSION activate"
>      (in namespace eval "::request" script line 8)
>      invoked from within
> "namespace eval ::request $script"
>      ("::try" body line 12)
> 
> Can someone help me to fix this?
> Is this an error with my setup or with rivet itselve?
> 
> Unfortunally i am not able to file a bug report, as the bug software 
> shows me "new bugs for rivet have been disabled".
> 
> Thank you!
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
> For additional commands, e-mail: rivet-dev-help@tcl.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org