根据请求,可以通过几种不同的方法来判断会话是否已经启动,例如: $isSessionActive = (session_id() != ""); 要么: $isSessionActive = defined('SID'); 但是,如果你开始一个会话,这些都会失败,然后closures它; session_id()将返回先前会话的ID,而SID将被定义。 同样,如果您已经有一个会话激活,那么在这个时候调用session_start()将会生成一个E_NOTICE 。 有没有一个理智的方法来检查一个会话当前是否处于活动状态,而不必诉诸于输出缓冲,closures操作符( @session_start() )或其他同样的操作? 编辑:我写了一个补丁,试图得到这个function包括在PHP中: http : //bugs.php.net/bug.php?id=52982 编辑8/29/2011:新function添加到PHP 5.4来解决这个问题: “通过新function,session_status公开会话状态” // as of 8/29/2011 $isSessionActive = (session_status() == PHP_SESSION_ACTIVE); 编辑12/5/11:在PHP手册上的session_status() 。
另一分钟我读了一篇关于OAuth的文章。 它特别描述了一系列请求期间客户端和服务提供者之间交换的令牌。 文章还提到OAuth作为授权层在RESTful API中获得了显着的普及。 据我了解,REST应该保持完全无状态。 问题:这个重复的令牌不会交换鱼雷REST的“无状态”原理吗? 恕我直言,令牌可以被看作是一种会话ID,不是吗?
不必按名称调用每个会话,有没有办法显示当前设置的所有会话的内容?
一种高可扩展性的方法是使用networking负载平衡来分割多个服务器之间的处理负载。 这种方法提出的一个挑战是服务器在哪里知道状态 – 将用户状态存储在“会话”中。 这个问题的一个解决scheme是“粘性会话”(aka“session affinity”),其中每个用户被分配给单个服务器,并且在整个会话期间,他/她的状态数据被专门包含在该服务器上。 “粘性会议”方法的优点和缺点是什么? 你用它,如果是的话,你满意吗?
什么是header('P3P: CP="CAO PSA OUR"'); 对于? 如何/为什么会让这个脚本在IE中正常工作? session_start(); if (!session_is_registered(pre_myusername)) { header("location:index.php"); exit(); }
我有用于添加variables到会话的PHP代码: <?php session_start(); if(isset($_GET['name'])) { $name = isset($_SESSION['name']) ? $_SESSION['name'] : array(); $name[] = $_GET['name']; $_SESSION['name'] = $name; } if (isset($_POST['remove'])) { unset($_SESSION['name']); } ?> <pre> <?php print_r($_SESSION); ?> </pre> <form name="input" action="index.php?name=<?php echo $list ?>" method="post"> <input type="submit" name ="add"value="Add" /> </form> <form name="input" action="index.php?name=<?php echo $list2 ?>" method="post"> <input type="submit" name="remove" value="Remove" /> […]
员工注意:这个问题和相关的答案被locking,以防止围绕与当前问题有关的当前事件进行讨论。 关于这个事件的问题可以在我们的meta网站上find 。 谢谢! 我希望能够将用户从Code Igniter中构build的应用程序中注销。 我知道如何结束一个活跃的本地会话: $this->session->sess_destroy(); 但是,如何销毁在另一台计算机上启动的会话,从而将用户从会话中注销? 我在会话数据中存储了一个与其帐户关联的唯一ID,因此我可以在数据库的会话表中看到它,但它与其他会话数据一起存储在名为user_data的列中,其内容看起来像这个: a:4: {s:9:"user_data";s:0:"";s:6:"userid";s:6:"189034";s:9:"logged_in";b:1;s:5:"token";i:1767727789;} 其中189034是用户的ID。 那么,有没有办法以某种方式根据用户的IDselect会话表中的行,然后删除行并销毁会话。 还是有另一种方法完全做到这一点?
我对CodeIgniter比较陌生,正在做我的第一个CI项目,其中有用户帐户等等。过去,我一直使用PHP的$ _SESSIONvariables来达到这个目的。 然而,CI似乎有自己的会话机制,它声称是“更好” CI的会话机制似乎将所有数据存储在cookie中? 就我个人而言,我喜欢所有数据存储在服务器上的想法,通过像PHP本地会话机制这样的cookie密钥访问…我是否认为这样更好? 我应该接受CI的机制吗? 还是应该继续使用本机PHP会话? 你们做什么? 谢谢, 马拉
我们在应用程序中有一个简单的性能testingstream程。 我们login 根据一些标准进行search 重复search不同的参数。 我们正在使用Jmeter进行性能testing。 我们需要运行多个线程以可扩展的方式进行testing。 我们目前安排的方式是: -Test Plan – Thread Group – Cookie Manager – Login To application – Search on param 1 – Search on param 2 – results summary table – Summary report 因此,基本上我们有总结返回表和报告目前在计划水平,而cookiepipe理器是在线程组级别。 当我运行一个线程运行良好,并完成。 当我缩放到多个线程时,只要下一个线程启动,最后一个线程的会话就会失效。 这会导致所有已经运行的线程由于新产生的线程而失败。 我看到了这个结果: 1.如果我运行多个线程,只有最后一个线程在结果汇总树中得到有效的响应 2.如果我用2个线程运行,并且以10秒的上升周期运行,这意味着每个线程都有时间完成自己,然后它们都成功运行。 根据我的理解,每个线程login到应用程序,并且由于cookiepipe理器在线程级别,价值将分别维护每个线程的会话ID? 但是什么导致线程之间的会话id值的覆盖? 任何帮助都感激不尽。
好的,所以我已经得到了这个完全罕见的负载平衡的PHP网站的独特场景。 令人沮丧的是 – 它并没有用来平衡负载。 现在我们开始发现问题了 目前唯一的问题是PHP会话。 自然没有人想到这个问题,所以PHP会话configuration保持其默认。 因此,这两个服务器都有自己的一小撮会话文件,不幸的是获取下一个请求的用户被抛出到另一个服务器上,因为他没有在第一个服务器上创build的会话。 现在,我已经阅读了PHP手册了解如何解决这种情况。 在那里我find了session_set_save_handler()的很好的function。 (巧合的是, 这个话题就这么 )整洁。 除了我必须在网站的所有页面上调用这个函数。 未来页面的开发人员也必须记得随时调用它。 感觉有点笨拙,更不用说可能违反了一打最好的编码做法。 如果我可以翻转一些全局configuration选项和Voilà – 会话全部被神奇地存储在一个数据库或一个内存caching或其他东西中,那将会更好。 任何想法如何做到这一点? 补充:澄清 – 我希望这是一个标准的解决scheme的标准情况。 仅供参考 – 我有一个MySQL数据库可用。 一定有一些现成的代码可以解决这个问题吗? 当然,我可以编写我自己的会话保存的东西和Greg指出的auto_prepend选项似乎很有前途 – 但是这将感觉重新发明轮子。 :P 新增2:负载均衡是基于DNS的。 我不知道这是如何工作,但我想这应该是这样的 。 添加3:好的,我看到一个解决scheme是使用auto_prepend选项插入到每个脚本session_set_save_handler()的调用,并写我自己的数据库持久化,也许投入调用memcached更好的性能。 很公平。 是否还有一些方法可以避免自己编码? 就像一些着名且经过充分testing的PHP插件一样? 添加了很多,后来:这是我最后的方式: 如何在PHP + MySQL中正确实现自定义会话持久化? 另外,我只是将会话处理程序手动包含在所有页面中。