【问题标题】:logout php session using javascript使用 javascript 注销 php 会话
【发布时间】:2013-07-22 00:16:10
【问题描述】:

我正在尝试使用 javascript 注销 php 会话。它不起作用 - 调用了 javascript 函数并且 if 语句起作用,但不调用 php 脚本。有更好的方法吗?我正在使用 .php 页面。

function logoutck() 
    {
    var r = confirm("Do you really want to log out?");
    if (r==true)
        {
        <?php
        session_start();
        session_destroy();
        header('Location: login.php');
        ?>
        } 
    }

【问题讨论】:

  • 这种方式无法将Javascript和PHP结合起来。
  • 了解什么是服务器端/客户端代码.... 使用 ajax 但先了解如何使用 PHP
  • 我在 SO 上看到这个错误的次数太多了。 我不明白!如果你有任何最低限度的PHP(HTTP)/HTML/JS/CSS 知识,作为一个 webdev,你应该不会犯这个错误。 这是从在线教程与阅读书籍学习基础知识的结果。所以去读书吧!
  • 为什么不重定向到其他页面?
  • 感谢所有有用的答案,我明白了我的错误。 @CodeAngry - 我不是网络开发者,这会让我犯错吗?只是好奇,你是否在没有犯错的情况下到达了你的位置?好羡慕!

标签: php javascript logout


【解决方案1】:

因为javascript 在客户端运行而PHP 在服务器端运行,所以它不起作用。

您可以使用AJAX 调用来销毁会话。

更多信息how to kill session from javascript

【讨论】:

  • 我认为这对于一项简单的任务来说太复杂了。海事组织:/
  • @felipsmartins 那么有什么简单的方法呢? :)
  • 我认为没有理由使用AJAX,因为这个页面会被重定向到另一个页面(login.php)
  • 我现在意识到,当我今晚晚些时候有机会时,我会重定向到 logout.php 页面。这很简单。
【解决方案2】:

你可以做到:

function logoutck() {
    var r = confirm("Do you really want to log out?");
    if (r) {
       window.location.href = 'http://site.com/logout.php'
    } 
}

【讨论】:

  • 这不会杀死服务器中的当前会话
  • @ABFORCE 除非终止会话所需的代码在 logout.php 内,否则可能?
  • @ABFORCE 我几乎想试试这个理论。
  • @ABFORCE 我的理论奏效了。我必须设置一个 Pastebin 文件来向你展示我做了什么来使它工作。
  • @felipsmartins 我在上面的回答中提到了你 "credit to" 和我的一个 (+1),干杯。
【解决方案3】:

根据我的理论和 http://pastebin.com/439xPdJNPastebin.com 文件

这是一个包含 2 个文件的工作演示,以及一个示例,旨在向您展示它是可以完成的。

修改以适应。

首先,关于如何使用它的一些说明:

您需要重新加载页面 (session1.php) 几次以获取数量。

然后,您会注意到,一旦您确认退出按钮,页面浏览量将归零。

感谢: (felipsmartins) 他的 JS 示例。

代码:

我们称这个session1.php文件

<?php

session_start();  
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];

?>

<!doctype html>

<head>

</head>

<body>

<script type="text/javascript">

function logoutck() {
    var r = confirm("Do you really want to log out?");
    if (r) {
       window.location.href = 'logout.php'
    }
}

</script>

<input id="button1" type='button' onclick='logoutck();' value='LOGOUT'/>

</body>

</html>

我们称这个logout.php文件

<?php

session_start();

if(isset($_SESSION['views']))
    unset($_SESSION['views']);

header("Location: session1.php");

?>

【讨论】:

  • 是的,这基本上是我要做的,但我要到明天才有机会回到这个项目。
【解决方案4】:

javascript、html 和 php 的工作原理:

服务器首先从上到下执行php脚本。它执行脚本中的所有语句并构建一个 html 页面,因此:&lt;?php echo '&lt;h1&gt;hello world&lt;h1/&gt;'; ?&gt; 变为 &lt;h1&gt;hello world&lt;h1/&gt;。当服务器完成执行所有内容时,它会返回创建的 html 页面。

该页面随后由浏览器加载,然后当浏览器看到 javascript 命令时,它会尝试执行它。因此,当一个 javascript 命令被执行时,就没有更多的 php 命令了,因为 php 服务器已经执行了它们并从中生成了一个 html 视图。

以下语句对于php服务器是一样的

<?php echo '<h1>hello world<h1/>'; ?>
<?= '<h1>hello world</h1>';
<h1>hello world</h1>

所以请注意,当您的 php 脚本执行时,您将转到 login.php,因为此命令在 html 视图返回给客户端之前由服务器 header('Location: login.php'); 执行。这意味着当您加载此 php 脚本时,客户端将收到由 login.php 创建的 html 文件(除非此脚本还包含转发到另一个脚本)

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 2013-02-18
    • 2015-02-13
    • 1970-01-01
    • 2016-02-12
    • 2012-05-11
    • 1970-01-01
    • 2014-08-15
    • 2012-01-21
    相关资源
    最近更新 更多