PHP+MySql并发性SESSION问题,困扰我狠久了

hongliang13 2003-09-28 12:38:57
是这样,一个论坛,FreeBSD系统,Apache+PHP+MySql
现在遇到一个问题:
一个页面,执行一次数据库查询,当用户访问这个页面时,再访问其他的PHP页面,总是要等到这个页面结束后其他的页面才开始执行。
这样狠不好。

我试验了一下,写了一个600多k的html文件,然后开两个IE读取他,没问题,同时进行。又写了一个只包含数据库连接和输出500k大小“aaaaaa”这样的php页面,也没问题。所以我排除了是Apache导致性能瓶颈的可能性。同时也排除了PHP和数据库连接问题。

那回是什么呢?我突然想到了我是使用session来进行用户身份认证的。我马上写了一个PHP测试页面,第一行就是session_start(),第二行就是echo "<a href=\"a.phtml\" target=_blank>,剩下的行数就是纯粹为了拖延时间的几千行echo "a<BR>"。把它放到服务器上,打开IE,输入网址,页面打开,可以看到滚动条不断的在变化,我点那个超级连接,打开一个新IE执行这个页面,果然!新的页面迟迟没有反应!等到原页面执行后,新的页面才开始执行!!!!!

这个session问题,该怎么解决呢?已经困扰我狠久了,我的论坛性能也受到了比较大的影响,望各位大侠帮忙!谢谢!
...全文
279 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongliang13 2003-09-28
  • 打赏
  • 举报
回复
可是,PHP.INI里面关于session的那段我已经看过好多遍了,似乎没有关于这方面的论述阿

我刚才把那个测试页面改了一下,改成了这样:
<?php
$r = rand(1, 15);
session_name("session".$r);
session_start();
$_SESSION['user_id'] = 10001;
echo $_SESSION['user_id'];
echo "<a href=\"a.phtml\" target=_blank>asdf</A><BR>";
echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<BR>";
。。。。。。
?>
问题似乎就解决了。。。
但是这样也不好,我岂不是要在每个源程序里面的session_start()前面都加上这样一段代码?
flydreams 2003-09-28
  • 打赏
  • 举报
回复
我想是这样子的,在你SESSION_START()那一页,APACHE是担心你在中间会随时REGISTER变量作为SESSION变量,于是就在你这页面没有完之前先把其它页面的SESSION_START()阻塞了。
我不知道怎么解决,我想也许在PHP.INI可以设置吧
hongliang13 2003-09-28
  • 打赏
  • 举报
回复
我查了一下PHP的帮助,看到了这样一段话
benja at benja dot be (15-Apr-2003 05:45)

Just for info, session_start() blocks if another PHP using the same session is still running in background. It seems it's waiting the other PHP to finish... and sometimes it can be a problem. Create 2 different sessions by setting 2 different names : session_name() solve the problem.
Benja.


看来这个问题已经被前人发现了,他说的指定两个session_name()这种解决方案,可以用吗?如果我后台有10个PHP页面在执行(用户开了10个窗口看10个帖子),岂不是要指定10个session_name()?
flydreams 2003-09-28
  • 打赏
  • 举报
回复
关注中……
flydreams 2003-09-28
  • 打赏
  • 举报
回复
可能PHP的SESSION是存为文件的形式,于是不能被同时打开,就造成了一个用户的SESSION不能同时在两个页面使用,必须是一个页面的SESSION结束了,才能让另一页的SESSION START()
刚才我查了查,有个session_destroy()函数,建议试用。 你在你哪个运行时间长的页面,在session_start()之后,早点调用session_destroy(),看看另外一个用session_start()的页面是否早点执行
earthwind 2003-09-28
  • 打赏
  • 举报
回复
制作自己的SESSION机制。
我想这是一个解决方法。
hongliang13 2003-09-28
  • 打赏
  • 举报
回复
不行,我发现,如果重新设置了session_name(),那么我原来的session信息也就同时消失了,根本不能这么解决。。。

我该怎么办呢?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧