Web üzerinde kullanıcı oturum açmış bir tanımlamak için bazı yolları nelerdir?

3 Cevap php

İşte senaryo:

Bir oturumu paylaşmak gerekir 5 web sitesi (farklı alan adları) vardır. Ben bir "blank.gif" bir görüntü verir ve aynı zamanda (geçerli oturum için o kadar senkronize) oturumu ayarlar her sitede kod biraz kullanıyorum. Her sitelerin diğer sitelerin her bir oturum-img çağırır. Ayrıca, tüm siteler (oturum saklanır) aynı veritabanına erişebilir. Bu FF ve Chrome üzerinde harika çalışıyor, ancak IE (veya Safari PC) hakkında ...

I need to come up with an alternative method to keep a session active? uygulaması, küçük bir özel CMS, yani gerçekten sadece 2-3 kişi kullanıyor olacak.

Herhalde IP tarafından kullanıcı oturumları belirlemek ve daha sonra tüm siteler genelinde IP için kontrol etmeye devam edebilirsiniz ...

Is there something more granular such as a computer uuid that i can check for?

3 Cevap

If it is the same session, why don't you just transfer the session ID as a GET parameter when the user moves from one page to another? – @Daff

@ Daff, burada cevap eklerseniz, ben değiştirmek ve cevap olarak seçin edeceğiz

Kullanıcıların işbirliği olmadan bu mümkün kılacak bir şey kullanıcı gizliliği ve sonunda sabit alacağı gizli açısından bir hata olurdu. Siteleri aren't supposed, bir kullanıcı olmuştur ne diğer siteler ve orada ne yaptığını bulmak mümkün.

You could override the session handler to make it save session data in a database shared by your different websites. Then, you'd have to set a session cookie with the same session ID on each server. You'd have to use session_set_save_handler and make something like that :

/**
 * @desc function used to open sessions
 * @param string session path
 * @param string session id
 * @return bool
 */
function xx_session_open($path, $id){
  return true;
}

/**
 * @desc used when closing a session
 * @return bool
 */
function xx_session_close(){
  return true;
}

/**
 * @desc saves session data
 * @param string session id
 * @param string session data
 * @uses xx_crypt
 * @return bool
 * @global object PDO instance
 */

function xx_session_write($id, $data){
  global $db;
  $crypted = xx_crypt($data);
  // Saves data into db
  $sql = 'REPLACE INTO sessions (`ID`, `data`, `lastUsed`, `IV`) VALUES(:id, :data, NOW(), :iv)';
  $sth = $db->prepare($sql);
  $sth->execute(array(':id'=>$id, ':data'=>$crypted[0], ':iv'=>$crypted[1]));
  return true;
}

/**
 * @desc gets session data
 * @param string session ID
 * @return string
 * @global object PDO instance
 * @uses xx_decrypt
 */
function xx_session_read($id){
  global $db;
  $sql = 'SELECT `data`, `IV` FROM sessions WHERE `ID`=:id';
  $sth = $db->prepare($sql);
  $sth->execute(array(':id'=>$id));
  list($crypted, $iv) = $sth->fetch();
  $data = xx_decrypt($crypted, $iv);
  return $data;
}

/**
 * @desc destroys a session
 * @param string session ID
 * @return bool
 * @global object PDO instance
 */
function xx_session_destroy($id){
  global $db;
  $sql = 'DELETE FROM sessions WHERE `ID`=:id';
  $sth = $db->prepare($sql);
  $sth->execute(array(':id'=>$id));
  return true;
}

/**
 * @desc delete old sessions
 * @param int session lifetime (in seconds)
 * @return bool
 * @global object PDO instance
 */
function xx_session_gc($lifetime){
  global $db;
  $sql = 'DELETE FROM sessions WHERE `lastUsed` < :limit';
  $sth = $db->prepare($sql);
  $sth->execute(array(':limit'=>date('Y-m-d H:i:s',time() - $lifetime)));
  return true;
}

// Set session handler
session_set_save_handler("xx_session_open", "xx_session_close", "xx_session_read", "xx_session_write", "xx_session_destroy", "xx_session_gc");

İstediğiniz tüm mekanizması On Single Sign ise, bunun için yapılan Kerberos protokolünü kontrol edebilir.