Grima  2018-08
Whispering into Alma's ear
Public Member Functions | Private Attributes | List of all members
EncryptedCookieSession Class Reference
Inheritance diagram for EncryptedCookieSession:

Public Member Functions

  __construct ( $key)
 
  open ( $save_path, $session_name)
 
  close ()
 
  destroy ($session_id)
 
  gc ($maxlifetime)
 
  read ($session_id)
 
  write ($session_id, $session_data)
 

Private Attributes

  $save_path
 
  $session_name
 
  $session_key
 
  $last_read
 

Detailed Description

Definition at line 4212 of file grima-lib.php.

Constructor & Destructor Documentation

◆ __construct()

EncryptedCookieSession::__construct (   $key )

Definition at line 4220 of file grima-lib.php.

References $key.

4220  {
4221  $this->session_key = $key;
4222  $this->last_read = "Not This";
4223  }
$key
Definition: encrypt.php:4

Member Function Documentation

◆ close()

EncryptedCookieSession::close ( )

Definition at line 4232 of file grima-lib.php.

4232  {
4233  #error_log("session_close()");
4234  return true;
4235  }

◆ destroy()

EncryptedCookieSession::destroy (   $session_id )

Definition at line 4237 of file grima-lib.php.

4237  {
4238  #error_log("session_destroy($session_id)");
4239  $params = session_get_cookie_params();
4240  $params['expires'] = time() - 42000;
4241  unset($params['lifetime']);
4242  setcookie( $this->session_name, '', $params );
4243  return true;
4244  }

◆ gc()

EncryptedCookieSession::gc (   $maxlifetime )

Definition at line 4246 of file grima-lib.php.

4246  {
4247  #error_log("session_gc($maxlifetime)");
4248  return true;
4249  }

◆ open()

EncryptedCookieSession::open (   $save_path,
  $session_name 
)

Definition at line 4225 of file grima-lib.php.

4225  {
4226  $this->save_path = $save_path;
4227  $this->session_name = $session_name;
4228  #error_log("session_open($save_path,$session_name)");
4229  return true;
4230  }

◆ read()

EncryptedCookieSession::read (   $session_id )

Definition at line 4251 of file grima-lib.php.

References $ciphertext, and $plaintext.

4251  {
4252  #error_log("session_read($session_id)");
4253  $nonce_ciphertext_b64 = isset( $_COOKIE[$this->session_name] ) ? $_COOKIE[$this->session_name] : "";
4254  if ($nonce_ciphertext_b64) {
4255  $nonce_ciphertext = base64_decode( $nonce_ciphertext_b64 );
4256  if (strlen($nonce_ciphertext)>24+16) {
4257  $nonce = substr( $nonce_ciphertext, 0, 24 );
4258  $ciphertext = substr( $nonce_ciphertext, 24 );
4259  $plaintext = sodium_crypto_secretbox_open( $ciphertext, $nonce, $this->session_key );
4260  #error_log("session_read -> $plaintext");
4261  $this->last_read = $plaintext;
4262  return $plaintext ?: "";
4263  } else {
4264  error_log("cookie too short: $nonce_ciphertext_b64");
4265  }
4266  } else {
4267  #error_log("cookie not set or empty");
4268  }
4269  return "";
4270  }
$plaintext
Definition: encrypt.php:2
$ciphertext
Definition: encrypt.php:11

◆ write()

EncryptedCookieSession::write (   $session_id,
  $session_data 
)

Definition at line 4272 of file grima-lib.php.

References $ciphertext.

4272  {
4273  #error_log("session_write($session_id,$session_data)");
4274  if (!$session_data) return true;
4275  if ($this->last_read == $session_data) return true;
4276  $nonce = random_bytes(24);
4277  $ciphertext = sodium_crypto_secretbox( $session_data, $nonce, $this->session_key );
4278  $nonce_ciphertext = $nonce.$ciphertext;
4279  $nonce_ciphertext_b64 = base64_encode( $nonce_ciphertext );
4280  $options = session_get_cookie_params();
4281  if (isset($options['expires']) && $options['expires']) {
4282  $options['expires'] += time();
4283  }
4284  unset($options['lifetime']);
4285  setcookie( $this->session_name, $nonce_ciphertext_b64, $options );
4286  return true;
4287  }
$ciphertext
Definition: encrypt.php:11

Member Data Documentation

◆ $last_read

EncryptedCookieSession::$last_read
private

Definition at line 4218 of file grima-lib.php.

◆ $save_path

EncryptedCookieSession::$save_path
private

Definition at line 4215 of file grima-lib.php.

◆ $session_key

EncryptedCookieSession::$session_key
private

Definition at line 4217 of file grima-lib.php.

◆ $session_name

EncryptedCookieSession::$session_name
private

Definition at line 4216 of file grima-lib.php.


The documentation for this class was generated from the following file: