2011-03-18 178 views
1

我想找到最好和更干净的方式来执行一个JavaScript函数,如果PHP会话存在。执行从PHP函数的JavaScript函数

JS-的script.js

  • 有JavaScript功能 - >功能doStuff(){//做的东西}

的index.php

  • 包含js文件 - >在头
  • 包含P用于检查$ _SESSION HP类 - >包括DOCTYPE之前

请让我知道thougts(我使用PHP,JavaScript的,jQuery的)。

  1. 如果$ _SESSION存在,执行js脚本的最佳方法是什么?
  2. 如果$ _SESSION被销毁,停止js脚本的最佳方法是什么?

感谢,

格雷格

+0

你必须有一些客户端Javascript查询服务器端PHP脚本的方法。否则,Javascript无法知道会话的当前状态。请记住,JS在客户端浏览器上执行,而PHP在服务器上执行。 – 2011-03-18 16:44:43

回答

5
<head> 
    <? if (session_is_registered('foo')) echo '<script>doStuff();</script>'; ?> 
    ... 
</head> 

无法跨越的服务器/客户端边界,所以最好的情况是转储队列客户端火的JavaScript页面上的东西功能。

或者,你可以有像session_verify.php,你可以在一个AJAX调用引用,然后选择“继续执行” /“停止”的基础上,你收到回响应。

Pseduo代码:

if (ajax_response_from_session_verify() == still_logged_in){ 
    execute doSomething(); 
else 
    stop doSomething(); 

但是要记住,调用到会话确认文件可能会延长这取决于您如何使用它的会话。 (我不确定是否需要)

+0

我想说的是布拉德在这里所说的。如果这没有帮助,那么请告诉我们您正在尝试做什么,我们可能会提供更多帮助? – jaz9090 2011-03-18 16:46:53

+0

布拉德给出的第一个选项实际上就是我这样做的方式。我想这不是一个更优雅的方式。现在这个会话已经开始并且JS被执行了,如果会话被销毁(用户注销了一个链接),那么移除JS的最好方法是什么?我想刷新浏览器 - > PHP头或HTML元刷新。 – Greg 2011-03-18 17:03:04

+0

@Greg:这一切都取决于你如何拥有这种设置。用你的措辞,我假设注销是一个基于AJAX的请求。所以,如果你足够的脚本代码模块,你可以让答复的执行/解除绑定任何需要(基本上执行本地清理)。如果它不是AJAX(或者作为一般规则),则页面刷新可能需要最少的努力。 – 2011-03-18 17:26:00

1

你有两种选择。

  1. 有一个单独的功能是文件,包括它只有在会话设置。
  2. 将JS文件作为PHP文件提供。这将允许您在JS文件中运行PHP命令。只要确保你的内容类型是好的。
0
if(session is OK) { 
    $script = "doStuff();"; 
} 

然后,在你的HTML头:

<head> 
... 
<script type="text/javascript"> 
document.ready(function() { 
<?php echo $script; ?> 
}); 
</script> 
... 
</head> 
0

布拉德是正确的,你需要使用PHP来输出到页面的,因为你不能直接从服务器调用JS。

写出脚本标记的另一种方法是通过PHP在HTML中放置一个标记,然后使用JavaScript读取该标记。举例来说,你正在使用jQuery的,你可以做这样的事情:

<div id="sessionExists><?php if (isset($_SESSION['foo'])) echo 'true';?></div> 

而在你的jQuery:

var session = ($('#sessionExists').text() === 'true'))? true : false; 

现在你有一个适用于“sessionExists,”一个布尔一个JS变量,你可以在JS脚本中查询并采取相应的行动。