2012-10-08 78 views
-3

我在页面上有日期,日期和时间等链接。如果有人点击“日期”,我想要开始一个会话。然后以同样的方式点击前一个会话的'Day'并且创建一个新的会话。这可能吗?Php会话根据链接开始和结束?

+0

是的,只是使用session_start()和session_destroy() – Nelson

+0

这听起来像你不应该使用任何会议使用它们(至少不是你在使用它们的方式) – Quentin

回答

1

我不知道为什么要使用会话这一点,但肯定的 - 这是可能的AJAX。

定义两个环节,我们姑且称之为启动和停止例如:

<a id="start">Start</a> 
<a id="stop">Stop</a> 

然后可以使用JavaScript(本例中将使用jQuery library)进行到后端处理的请求,这将调用session_start()session_stop()。您可以(可选)在用户会话停止时序列化用户的会话,如果稍后必须完成某些工作。

首先,一个AJAX请求的例子。在页面中,您想要建立事件来调用通用函数来发起异步请求来开始或结束用户的会话。我们通过创建一个匿名函数,将运行在DOM准备就绪:

<script> 
$(document).ready(function() { 
    // Make the request to start or stop a session 
    function asyncSessionMolester(uri, val) { 
    $.ajax({ 
     url: uri 
     type: 'post', 
     dataType: "json", 
     cache: false, 
     data: { 
      'action':session, 
      'value':val 
     }, 
     success: function(remoteResponse, textStatus) { 
      alert('Session now in mode ' + toggle); 
      // do other stuff you want to do on success 
     }, 
     error: function(xhr, desc, err) { 
      // There is a lot more data in xhr, this just shows what the server 
      // wrote to the browser in the console for debugging. 
      // Handle failure here 
      console.log(xhr.textResponse); 
     } 
    }); 

    // now, our events: 

    $('#start').click(function() { 
     asyncSessionMolestor('/ajax.php', 'start'); 
    }); 

    $('#stop').click(function() { 
     asyncSessionMolestor('/ajax.php', 'stop'); 
    }); 
}); 
</script> 

现在,你需要创建一些PHP是住在/ajax.php并做以下几件事:

  • 确保如果建立一个会话
  • 检查的HTTP_X_REQUESTED_WITH头,如果它不存在有人通过浏览器直接访问它的用户必须在提出申请的权利(保释出来如果是这样)
  • 检查POST数据actionvalue。如果动作是session则表示switch()。如果start,则开始会话。如果stop则停止会话。
  • 发送JSON响应返回,您可以在Ajax调用

检查如果需要保存会话以供日后分析或工作电话serialize($_SESSION),甚至json_encode($_SESSION)摧毁它之前。

注意事项:

  • 必须手柄成功正常。用户需要知道他们没有会话了。也许是成功的重定向。你也应该妥善处理失败。我只给出了一个简单的例子。

  • 绝不能在此之前开始启动会话代码打印任何东西。

  • 你可能不想使用像你一样的会话,但你问是否有可能,而且它是。

  • 代码没有经过测试,只是作为例子。

  • 本例中没有显示安全性。至少你想要某种CSRF保护措施,并且当然要对你的输入进行消毒。

编辑

如果你想根据国家相同的链接启动/停止,你可以设置一个变量来跟踪它,例如:

<script> 
$(document).ready(function() { 
    var state = false; 

    ... ajax stuff as above 

    $('#date').click(function() { 
     switch(state) { 
      case true: 
       // We successfully created or recreated a session 
       asyncSessionMolester('/ajax.php', 'stop'); 
       break; 
      case false: 
       // User has not yet created a session 
       asyncSessionMolester('/ajax.php', 'start'); 
       break; 
     } 
    }); 
}); 
</script> 

而且您只有一个链接,其ID为date。只要确保AJAX函数是更新state变量的函数,具体取决于调用的成功与否。请记住,它是异步的 - 你可能想要阻止用户点击快乐。

这应该让你朝着你想去的方向前进,或者说明它为什么不是一个好主意。但是,这是实现它的一种方法。