回 帖 发 新 帖 刷新版面

主题:也是请教“session超时设置”问题 谢谢

看了hxf4244的"session超时设置"的题目后,我做了两个,
但每个里面有一句不会,请朋友们帮忙给填上,并说明哪一个好些,谢谢!

<?php session_start();
interval();
function interval()
{
    $s++;
    if($s==600) 
    {
        session_unregister(name); 
        header("location:注册.php");
    } 
    //setTimeout('interval();',1000); 请在这里写类似的php语句
}
?>

<script language=javascript>
interval();
var s=0;
function interval(){
s++;
if(s==600)
{
    //session_unregister(name);清在这里写类似的js语句
    location="location:注册.php";}
setTimeout("interval();",1000);
}
</script>

回复列表 (共4个回复)

沙发

个人愚见:方法一没办法直接写,因为setTimeout()是js脚本,生成后在客户端起作用,而interval()是服务器端函数,试问客户端脚本怎么样才能实现一秒种执行一次服务器端代码呢?一定要这样做那就要借助ajax技术实现客户端异步操作服务器端的功能;

方法二可以直接实现,如以下测试代码:
<?php
//文件名:session.php
session_start();
session_register(name_me);
$_SESSION["name_me"] = "longlong16";
echo "<a href=index.php>链接</a>";
?>
<script language=javascript>
interval();
var s=0;
function interval(){
s++;
if(s==600)
{
    document.write("<?php session_unregister(name_me); ?>");
    window.location="index.php";
}
setTimeout("interval();",10);
}
</script>

<?php
//index.php
session_start();
if(session_is_registered("name_me"))echo $_SESSION["name_me"];
?>

你可以直接点击链接到index.php里可以看到输出longlong16,如果让其自动跳转到index.php则没有输出,因为已经执行了document.write("<?php session_unregister(name_me); ?>");这句代码.

板凳

谢谢你的解释和代码,让我从中学到了许多东西。
程序在我的服务器上运行时有这样一个问题,name_me不识别,必须去掉“_”,
另外,无论s=多大,点“链接”后,那个变量已经被注销了,是不是服务器端先把
<?php session_unregister(name_me); ?> 执行完了,才把页面发回来?
非常感谢你的帮助,谢谢!





3 楼

_这个问题我不知道是不是存在,但是我这测试点链接的时候到index.php确实没有注销session输出了longlong16,但是当s达到600跳转过来时候index.php没有输出,说明前者没有执行<?php session_unregister(name_me); ?>,后者执行了.

4 楼

我再试试吧,谢谢你,非常感谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册