Bir oturum işleyici PHP kurabiye

1 Cevap php

Benim özel PHP oturum işleyicisi hata ayıklamak için çalışıyor çok ilginç bir sorun haline çalıştırmak. Bana bilinmeyen nedense ben yazma işlevi çok başlangıcına kadar sağa kadar tüm yol oturumu işleyici aracılığıyla çerezleri ayarlayabilirsiniz.

Bildiğim kadarıyla oturum işleyicisi aramalar bu sırayla gitmek.

open -> read -> write -> close

Açık fonksiyon sadece iyi bir çerez.

function open($save_path,$session_name)  
{  
  require_once('database.php');  
  require_once('websiteinfo.php');
  mysql_connect($sqllocation,$sql_session_user,$sql_session_pass);
  @mysql_select_db($sql_default_db);
  date_default_timezone_set('America/Los_Angeles');  
  setcookie("test","test");
  return TRUE;  
}

Okuma işlevi bir değer döndürürse çok anına kadar sağa kadar bir çerez ayarlayabilirsiniz.

function read($session_id)
{
  $time = time();
  $query = "SELECT * FROM 'sessions' WHERE 'expires' > '$time'";
  $query_result = mysql_query($query);
  $data = '';

  /* fetch the array and start sifting through it */
  while($session_array = mysql_fetch_array($query_result))
  {
    /* strip the slashes from the session array */
    $session_array = $this->strip($session_array);

    /* authenticate the user and if so return the session data */
    if($this->auth_check($session_array,$session_id))
    {
      $data = $session_array['data'];
    }
  }

  setcookie("testcookie1","value1",time()+1000,'/');

  return $data;
}

Yazma işlevinin ilk hattı başka bir çerez ayarı ve bu başlıklar zaten gönderilir çünkü.

1 Cevap

Için manuel session_set_save_handler():

Note: The "write" handler is not executed until after the output stream is closed. Thus, output from debugging statements in the "write" handler will never be seen in the browser. If debugging output is necessary, it is suggested that the debug output be written to a file instead.

PHP neredeyse tamamen yürütme döngüsü ile yapılır kadar Esasen, (kayıtlı oturum yazma işlevini çağırarak) oturum verilerine yazma değişiklik olmaz. Bu zamana kadar, tüm çıktı zaten gönderildi ve başlık bilgilerini değiştirmek mümkün değildir, bu yüzden setcookie() çalışmayacaktır.

Bunu kullanarak, daha önceki veri yazmak olabilir session_write_close().