How to set up MySQL-based PHP sessions using the Stanford Web Application Toolkit

From Web Services Wiki

Jump to: navigation, search

Contents

Problem

Your application makes use of PHP's session mechanism, but it loses session information between requests. Since Stanford has multiple web servers, different requests may be directed to different servers, and session information is often lost as a result.

Solution

Use a MySQL-based storage mechanism for your sessions to ensure that session information does not get lost between requests.

Connect to the database

Read How to configure and access MySQL using the Stanford Web Application Toolkit for more information about accessing MySQL through the toolkit. Please note that only groups, departments, and services have access to MySQL at this time. Individual user accounts are not supported.

Using a configuration file

Using a configuration file to enable MySQL-based sessions using SWAT is extremely simple. Set up a configuration file (or edit an existing one) containing the following snippet and enter your own database login information.

---
 
# StanfordApp YAML configuration file
 
database:
  name: my_database
  username: my_username
  password: my_password
  use encryption: no
  use mysql sessions: yes

Initialize your StanfordApp object using this configuration file. MySQL-based sessions will automatically be configured for you.

// Include StanfordApp
include_once("stanford.app.php");
 
// Initialize StanfordApp
$app = new StanfordApp("my_config.yaml");
 
// MySQL-based sessions are automatically enabled

Manual configuration

Manually configuring MySQL-based sessions is also simple. Simply configure StanfordDatabase and then call setup_mysql_sessions.

// Include StanfordDatabase
include_once("stanford.database.php");
 
// Initialize StanfordDatabase
$db = new StanfordDatabase();
 
// Set up the database
$db->set_database("my_database");
$db->set_username("my_username");
$db->set_password("my_password");
 
// Enable MySQL-based sessions
if($db->setup_mysql_sessions() == true) {
 
  // MySQL-based sessions are now enabled
 
}

Troubleshooting

The test script failed. What should I do?

Make sure that your database login information is correct. Try logging into phpMyAdmin or through a shell to verify. If the script still doesn't work, make sure that your database account has sufficient access to create a new table. In the absence of an existing table called php_sessions, the toolkit attempts to create one automatically. You or an administrator with privileged access to the database may create the table manually in an attempt to remedy the problem:

CREATE TABLE php_sessions (
     sessionid varchar(40) BINARY NOT NULL DEFAULT '',
     expiry int(10) UNSIGNED NOT NULL DEFAULT '0',
     value text NOT NULL,
     PRIMARY KEY  (sessionid)
 ) TYPE=MyISAM COMMENT='Sessions';

Verifying the change

Call the using_mysql_sessions function to verify that MySQL-based sessions have been configured.

// First, initialize and configure StanfordDatabase
$db = new StanfordDatabase("username", "password", "database");
 
// Set up MySQL-based sessions
$db->setup_mysql_sessions();
 
// Check status
if($db->using_mysql_sessions() == true) {
  echo "<p>Success!</p>";
}
else {
  echo "<p>Failure</p>";
}
Personal tools