[Catalyst] Accessing arbitrary session data of a given ID - Store::DBI

Adam Herzog adam at adamherzog.com
Wed Nov 23 23:14:54 GMT 2016


On Oct 23, 2016, at 14:55, Hector Azpurua <h3ct0r.ml at gmail.com> wrote:
> Is there a recommended way to access or modify session data stored in
> database with Store::DBI ?

The session data is typically a hashref of data, serialized using Storable, and converted to Base64 for storage in the database. Look at the get_session_data() and store_session_data() in Catalyst::Plugin::Session::Store::DBI to see how the data is retrieved and stored: https://metacpan.org/source/Catalyst::Plugin::Session::Store::DBI#L24

You can do the same thing. From code outside Catalyst you can use DBI or DBIx::Class or whatever to SELECT the data from the database, decode/thaw it, work with it however you'd like, then freeze/encode it and UPDATE the db record. You'll probably want to wrap that in a transaction.

A separate problem is that the session data is keyed on the session id, not the username, so you won't be able to directly SELECT the session data for a particular username. You'd need to select and examine each session to find the username in $session_data->{'__user'}. Or maybe create a subclass of Catalyst::Plugin::Session::Store::DBI and store the username as a separate column in the sessions table. I have no idea how difficult that would be, but I bet it's manageable.

-A




More information about the Catalyst mailing list