我有一个Web应用程序,我打算为每个客户端提供自己的子域,如client1.myapp.com,client2.myapp.com等。当用户登录时,我将他们的用户ID存储在会话变量中,例如data.join(
data.filter($"session" !== "").select(
$"ip" as "r_ip", $"session" as "r_session", $"ts" as "r_ts"
),
$"ip" === $"r_ip"
)
.filter($"ts" >= $"r_ts")
.groupBy($"ip",$"ts")
.agg(max($"r_ts") as "r_ts")
.join(
data.select($"session",$"ts" as "l_ts"),
$"r_ts" === $"l_ts"
)
.select($"ip",$"ts",$"session")
设置ts
时,用户已登录并可以访问该应用程序。由于用户ID在每个客户端中仅是唯一的,因此我需要一种方法来阻止用户访问其他客户端。子域。我考虑使用会话cookie,但后来我认为cookie可以被黑客入侵。现在,我正在考虑为每个客户分配一个唯一的客户ID,并使用$_SESSION['user'] = 4;
代替$_SESSION['user']
。这是解决问题的安全方法吗?我还有其他选择吗?
答案 0 :(得分:1)
尝试这样的事情。我希望这会有所帮助。
当用户登录时,将其子域存储在会话变量中,如:
$_SESSION['user_subdomain'] = 'client1.myapp.com';
当设置$_SESSION['user']
和$_SESSION['user_subdomain']
时,用户登录并访问应用程序,然后只检查当前访问应用程序的子域是否等于$_SESSION['user_subdomain']
。
通过使用这种方式,如果客户端尝试访问其他客户端的子域,则可以将客户端重定向到其正确的应用程序的子域。通过这种方式,您可以阻止用户访问其他客户端的子域。
答案 1 :(得分:1)
您的$clientID
方法没有任何问题。
如果您想获得幻想,可以执行类似使用session_set_cookie_params的操作,以便所有域和子域都可以访问相同的PHPSESSID
Cookie。这有其好处,特别是如果您的集中登录页面需要检测用户是否已登录特定域或子域。或者,如果您希望允许用户同时从所有子域注销,或者您希望创建可以访问所有子域的管理帐户。
永远不要相信正在发送的会话ID,即使cookie绑定到特定的子域,因为所有子域的会话都在服务器上的同一目录中stored。
对此的解决方案可能是:ini_set(session.save_path, "/path/to/your/folder/$clientid")
然后您将拥有一个专用于每个客户端的唯一目录来存储会话。此方法的好处是,您的$_SESSION
不会包含与其他子域相关的信息。
您还可以利用sesssion_name代替PHPSESSID
,您可以使用client1或client2来清楚会话属于哪个客户端。
例如client2=8d72edf35377a27388cb;client8=b47277bc8e3d4a5f
然后PHP可以读取此cookie并了解会话所在的客户端。
您也可以使用上述所有内容的组合,无论对您有用
请在此处查看与会话相关的功能:http://php.net/manual/en/book.session.php
此处与会话相关的设置:http://php.net/manual/en/session.configuration.php