对于想了解PHP-同一会话,不同域,设置会话ID的读者,本文将是一篇不可错过的文章,我们将详细介绍php不同用户登录不同页面,并且为您提供关于c#–如果在配置中未设置会话提供程序时如何获取会话超时值?
对于想了解PHP-同一会话,不同域,设置会话ID的读者,本文将是一篇不可错过的文章,我们将详细介绍php不同用户登录不同页面,并且为您提供关于c# – 如果在配置中未设置会话提供程序时如何获取会话超时值?、httpservletrequest-创建新会话/更改会话ID、JSP Servlet会话invalidate()不会使会话为空、node.js – 使用快速/连接和会话存储时如何查找会话ID?的有价值信息。
本文目录一览:- PHP-同一会话,不同域,设置会话ID(php不同用户登录不同页面)
- c# – 如果在配置中未设置会话提供程序时如何获取会话超时值?
- httpservletrequest-创建新会话/更改会话ID
- JSP Servlet会话invalidate()不会使会话为空
- node.js – 使用快速/连接和会话存储时如何查找会话ID?
PHP-同一会话,不同域,设置会话ID(php不同用户登录不同页面)
我有几个要租用的域名.
我创建了这样的方法:
用户登录在中央位置进行,并且会话保存在数据库中.
假设用户A要转到abc.com域.我的应用将其重定向到他登录的主身份验证域.
登录后生成一个身份验证令牌,该身份验证令牌保存在会话表的字段中,并将其传递回abc.com应用程序.
在这里,我使用auth_token从数据库中获取session_id,并将abc.com的session_id设置为相同.
问题在于它始终会创建一个新会话.
这是我的abc.com代码
$sessionId = // get from the database using the auth_token.
/* CLOSE PREVIoUS SESSION */
session_destroy();
// sets the new id.
session_id($sessionId);
/** start new session * */
session_start();
我缺少什么?
我在Symfony框架中使用PHP.不知道它是否与symfony会话处理有关.
解决方法:
好.我解决了我的问题.
我必须在调用session_destroy()之后删除旧的会话cookie.
如果有人感兴趣,这是我的完整代码:
$sessionId = // get session id from the database using the auth_token
session_destroy();
$this->getResponse()->setCookie('mycookie',null,time()-3600);
session_id($sessionId);
/** start new session * */
session_start();
$this->getResponse()->setCookie('mycookie', $sessionId,null,null,'mydomain');
谢谢大家的帮助.
c# – 如果在配置中未设置会话提供程序时如何获取会话超时值?
解决方法
使用以下代码可以获取会话超时值,无论是否在本地的web.config中定义.
Configuration conf = WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath); SessionStateSection section = (SessionStateSection) conf.GetSection("system.web/sessionState"); int timeout = (int) section.Timeout.TotalMinutes;
httpservletrequest-创建新会话/更改会话ID
我正在维护Java Web应用程序。
通过登录代码,它可以通过HttpServletRequest的getSession()方法从HttpServletRequest中获取一个HttpSession。(它在会话中使用一些值进行认证)
但是,我担心会话固定攻击,因此在使用初始会话后,我想开始一个新会话或更改会话ID。这可能吗?
答案1
小编典典Servlet 3.0 API不允许您更改现有会话上的会话ID。通常,为了防止会话固定,您将只想创建一个新的并使旧的无效。
您可以像这样使会话无效
request.getSession(false).invalidate();
然后创建一个新的会话
getSession(true)
(也getSession()
应该工作)
显然,如果会话中有要保留的数据,则需要将其从第一个会话复制到第二个会话。
请注意,对于会话固定保护,通常认为只对身份验证请求执行此操作即可。但是更高级别的安全性涉及为每个请求都抛弃旧会话并进行新会话。
JSP Servlet会话invalidate()不会使会话为空
我的JSP项目中有三个简单的HttpServlet类,即“ LoginServlet”,“ LogoutServlet”和“
ProfileServlet”。
- LoginServlet:通过将“名称”属性设置为会话来登录用户
- LogoutServlet:注销用户并使会话无效
- ProfileServlet:如果用户已登录,则显示用户欢迎信息
我认为以下两个最后两个servlet是有问题的。
@SuppressWarnings("serial")public class LogoutServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out=response.getWriter(); HttpSession session=request.getSession(false); session.invalidate(); request.getRequestDispatcher("link.jsp").include(request, response); out.print("You are successfully logged out!"); out.close(); }}
和
@SuppressWarnings("serial")public class ProfileServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); request.getRequestDispatcher("link.jsp").include(request, response); HttpSession session = request.getSession(false); if (session != null) { String name = (String) session.getAttribute("name"); out.print("Hello, " + name + " Welcome to Profile"); } else { out.print("Please login first"); request.getRequestDispatcher("login.html").include(request, response); } out.close(); }}
和link.jsp:
<% HttpSession nsession = request.getSession(false);if(nsession == null) {%><a href="login.html">Login</a><%}else {%><a href="LogoutServlet">Logout</a><%}%><a href="ProfileServlet">Profile</a><hr/>
问题是用户登录时,单击“注销”链接并调用“ LogoutServlet”时,会话未正确无效,并且ProfileServlet仍打印出来
"Hello, null Welcome to Profile"
而不是重定向到“ login.html”页面,因为该会话仍不为null。结果,“登录”链接未显示在“ link.jsp”页面上。这使用户无法尝试再次登录。
编辑: 为了使问题得到澄清,我做了一个新的html页面并更新了servlet以执行此操作
request.getRequestDispatcher("link.html").include(request, response);
和“ link.html”。
<a href="login.html">Login</a><a href="LogoutServlet">Logout</a><a href="ProfileServlet">Profile</a><hr/>
有趣的是,这正是我想要的!我想问题是
request.getRequestDispatcher("link.jsp").include(request, response);
但是我无法解释为什么…
答案1
小编典典在JSP中,默认情况下会创建新会话(如果不存在),因此您将始终获得非null会话。您可以通过在页面上添加以下页面指令来禁用它:
<%@ page session="false" %>
node.js – 使用快速/连接和会话存储时如何查找会话ID?
目前,会议存储在Redis商店中,我正在使用express / connect来处理会话存储.可用于销毁会话的可用功能之一如下:
.destroy(sid,callback)
但是我需要在调用.destroy()之前找到该会话ID.在Redis中,用户名存储为会话的一部分.
问题:是否可以根据用户名查询Redis获取会话ID?
解决方法
关于PHP-同一会话,不同域,设置会话ID和php不同用户登录不同页面的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c# – 如果在配置中未设置会话提供程序时如何获取会话超时值?、httpservletrequest-创建新会话/更改会话ID、JSP Servlet会话invalidate()不会使会话为空、node.js – 使用快速/连接和会话存储时如何查找会话ID?的相关信息,请在本站寻找。
本文标签: