| Home Page | Recent Changes

Sessions

Here's an example on how to implement sessions into your application.

Sessions are usefull to keep a record of variables per user/session. Sessions are often used in web pages to keep track of temporary user settings when they visit your site.

Sessions class

This class manages all sessions

class Sessions extends Object;

var array<Session> sessions;

// create a new session
function Session createSession()
{
  sessions.length = sessions.length+1;
  sessions[sessions.length-1] = new(None) class'Session';
  sessions[sessions.length-1].Hash = createSessionHash();
  return sessions[sessions.length-1];
}

// get a session by it's hash
function Session getSession(string hash, optional bool bCreateNew)
{
  local int i;
  for (i = 0; i < sessions.length; i++)
  {
    if (sessions[i].Hash == hash) return sessions[i];
  }
  if (bCreateNew) return createSession();
  return none;
}

// destroy an existing session
function bool destroySession(Session session)
{
  local int i;
  for (i = 0; i < sessions.length; i++)
  {
    if (sessions[i].Hash == session.Hash) 
    {
      sessions.Remove(i, 1);
      return true;
    }
  }
  return false;
}

// create a unique session hash
function private string createSessionHash()
{
  local int i;
  local string temphash;

  do {
    temphash = Right("00000"$string(Rand(65536)), 5)$Right("00000"$string(Rand(65536)), 5);
    for (i = 0; i < sessions.length; i++)
    {
      if (sessions[i].hash == temphash) break;
    }
  } until (i == sessions.length);
  return temphash;
}

Session class

This class will contain the data for a single session.

class Session extends Object;

struct export KeyValuePair
{
    var string Key;
    var string Value;
};

// contains the unique identifier
var string hash;
// contains the data for this session
var array<KeyValuePair> Data;

// get the value of a var name, return sdefault if not found
// bFound is 1 when the value exists, 0 otherwise
function string getValue(string name, optional string sdefault, optional out int bFound)
{
  local int i;
  bFound = true;
  for (i = 0; i<data.length; i++)
  {
    if (data[i].key == name) return data[i].value;
  }
  bFound = false;
  return sdefault;
}

// Set the value of a var name, if bAddIfNotExists it will be added when it doesn't exist
// oldValue will have the previous value
function bool setValue(string name, string value, bool bAddIfNotExists, optional out string oldValue)
{
  local int i;
  for (i = 0; i<data.length; i++)
  {
    if (data[i].key == name) 
    {
      oldValue = data[i].value;
      data[i].value = value;
      return true;
    }
  }
  if (bAddIfNotExists)
  {
    data.length = data.length+1;
    data[data.length-1].Key = name;
    data[data.length-1].Value = value;
    return true;
  }
  return false;
}

// Remove a value from the session
function bool removeValue(string name, optional out string oldValue)
{
  local int i;
  for (i = 0; i<data.length; i++)
  {
    if (data[i].key == name) 
    {
      oldValue = data[i].value;
      data.remove(i, 1);
      return true;
    }
  }
  return false;
}

Example usage

Let's say you have made a custom QueryHandler and you need to keep track of some changes before submitting them.

class MyQueryHandler extends xWebQueryHandler;

var Sessions sessions;

function bool Init()
{
  Super.Init();
  sessions = new(None) class'Sessions';
  return true;
}

function bool Query(WebRequest Request, WebResponse Response)
{
  local session CurSession;
  local int tempvalue;

  CurSession = sessions.getSession(Request.GetVariable("sessionID"), true);
  Response.Subst("sessionID", CurSession.hash); // replace %sessionID% with the session hash

  tempvalue = int(CurSession.getValue("pageVisits", 0));
  tempValue++;
  tempvalue = CurSession.setValue("pageVisits", string(tempvalue), true);
  Response.Subst("pageVisits", string(tempvalue));
  // process the query
}

Now you will only have to pass the sessionID to remember the variables

Example HTML file:

  <html>
  <body>
  You have visited this page %pageVisits% time(s)
  <p> 
  <a href="?sessionID=%sessionID%">include the session ID in a link like this</a>
  <p>
  or this to include it in a form
  <form>
  <input type="hidden" name="sessionID" value="%sessionID%">
  <input type="submit">
  </form>
  </body>
  </html>

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

FAQs

Help Desk

Mapping Topics

Mapping Lessons

UnrealEd Interface

UnrealScript Topics

UnrealScript Lessons

Making Mods

Class Tree

Modeling Topics

Chongqing Page

Log In