Drupal 6.x使用Javascript确定用户是否已登录

时间:2012-03-08 21:47:37

标签: php javascript ajax drupal

我遇到需要在Drupal 6.x节点上使用JavaScript的情况。我正在查看对PHP函数的JavaScript调用,但我不确定如何实现它,因为我正在执行以下操作:

我有一个从我的Drupal站点提供的Java Applet。我想知道用户是否在x分钟后仍然登录该站点。如果用户未登录,我需要关闭小程序。如果用户仍然登录,那么我再等x分钟并检查。

我正在寻找在启动Java Applet的同一页面上运行的代码,我无法对Applet代码本身进行更改。也许有更好的方法,但我认为我需要Javascript来使用Javascript“SetTimeout()”方法执行此连续检查。

如何从Javascript调用Drupal PHP“user_is_logged_in()”函数?

是否有某人可能会推荐的教程有助于阐明这一过程?我已经查看了许多面向AJAX的教程,认为AJAX是我需要使用的,但没有找到任何提供我可以关联的框架。

谢谢!

2 个答案:

答案 0 :(得分:0)

不确定在x分钟内检查一次,但是有一个名为drupal_to_js的方法允许你将一个drupal变量分配给一个js变量。因此,您可以获得user_is_logged_in()的结果,并将其存储为带drupal_to_js()的js变量。

也许可以为某个自定义模块的hook_init()设置此变量,以便在用户登录时检查用户的每个页面请求。我知道PHP中没有相当于settimeout但感觉此选项也可以被考虑。希望它有所帮助!

答案 1 :(得分:-1)

那么你需要对自定义模块进行AJAX调用,然后调用php函数并返回结果。

因此,在您已有的自定义模块中,或者创建一个自定义模块:

function MODULENAME_menu() {
  $items = array();

  $items['user/logged_on'] = array(
    'title' => 'Ajax logincheck',
    'page callback' => 'MODULENAME_check_user_status',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK
  );

  return $items
}

function MODULENAME_check_user_status($uid) {
  // Do the lookup / checking
  // something like:
  if (user_is_logged_in()) {
    echo '1';
  else {
    echo $result;
  }
  exit();
}

MODULENAME替换为您的模块名称,然后对/user/logged_on进行jQuery ajax调用。哪个应该返回1或0来告诉你他是否仍然登录。

但我不确定你是否可以通过AJAX调用访问$ GLOBAL ['user'],但值得一试。

编辑:示例ajax调用函数将是这样的:

function checkUserStatus() {
     $.ajax({
        url: "/user/logged_on",
        complete: validateUser
    });
}

function validateUser(result) {
    if (result) {
        // User is logged in do what you need to do
    }
}

我猜你想用checkUserStatus方法拨打setTimeout()

如果您还有其他需要,请告诉我......