| Home Page | Recent Changes | Preferences

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

Image Uploads

Random Page

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

Mapping Topics

Mapping Lessons

UnrealEd Interface

Questions&Answers

Scripting Topics

Scripting Lessons

Making Mods

Class Tree

Questions&Answers

Modeling Topics

Questions&Answers

Log In