首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么方法可以识别网络上登录的用户?

有什么方法可以识别网络上登录的用户?
EN

Stack Overflow用户
提问于 2010-05-06 15:08:00
回答 3查看 1.2K关注 0票数 5

下面是一个场景:

有5个网站(不同的域名)需要共享一个会话。我在每个站点上都使用了一些代码,它返回一个"blank.gif“映像,同时设置会话(将其同步到当前会话)。每个站点都从其他站点调用一个会话-img。而且,所有站点都可以访问同一个数据库(存储会话的地方)。这是很好的工作在FF和Chrome,但不是在IE (或Safari PC).

我需要一个替代的方法来保持会话活动?这个应用程序是一个小定制的CMS,所以实际上只有2-3人会使用它。

我可能可以通过IP识别用户登录,然后继续检查所有站点的IP访问情况.

是否有更细粒度的东西,如我可以检查的计算机uuid?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-26 18:37:19

如果是同一个会话,那么当用户从一个页面移动到另一个页面时,为什么不将会话ID作为GET参数传输呢?- @Daff

@Daff,如果您在这里添加您的答案,我将修改并选择它作为答案

票数 1
EN

Stack Overflow用户

发布于 2010-05-06 15:24:13

任何在没有用户合作的情况下使这成为可能的事情,都将是用户隐私和匿名方面的一个缺陷,而这些问题最终会得到解决。网站不应该能够找出一个用户去过的其他网站,以及他在那里做了什么。

票数 2
EN

Stack Overflow用户

发布于 2010-05-06 15:17:42

可以重写会话处理程序,使其将会话数据保存到由不同网站共享的数据库中。然后,您必须在每个服务器上设置具有相同会话ID的会话cookie。您必须使用处理程序并制作类似的内容:

代码语言:javascript
复制
/**
 * @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");

如果您只需要一个单一的登录机制,您可以检查为此创建的Kerberos协议。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2782111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档