我正在评估在tomcat中使用会话复制的粘性会话的情况.从我最初的评估开始,我认为如果我们启用会话复制,那么在一个tomcat节点中启动的会话将被复制到所有其他tomcat节点,因此我们不需要粘性会话来继续会话,并且任何节点都可以接收请求.
但似乎会话复制通常与粘性会话一起使用,否则只要请求转到其他节点,就需要更改会话ID.ref:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html#Bind_session_after_crash_to_failover_node
如果你必须启用粘性会话,任何人都可以解释会话复制的真正用途吗?因为当具有给定会话ID的请求始终到达同一节点时,您将不必要地在每个节点上复制会话.在节点崩溃的情况下它可能是有益的,但是这不会经常发生并且仅使用会话复制似乎是一种过度杀伤.
我在Laravel中使用cookie会话驱动程序很困难.
我有一个简单的表格,有一个验证到位.这是我保存此表单数据的方法:
public function store()
{
$this->validate(request(), [
'name' => 'required',
'title' => 'required',
'description' => 'required|max:600',
'image' => 'required|file|mimes:jpeg,png',
]);
$member = TeamMember::create(request()->all());
$member->addImage(request()->file('image'));
return redirect()->route('backoffice.team-members');
}
Run Code Online (Sandbox Code Playgroud)
很简单.
问题是,当使用cookie会话驱动程序时,如果我使用长度为1024个字符的描述保存此表单,我将被重定向回但没有闪存数据,并且$errors视图中没有下一个要处理的请求.
例:
这是使用此行后的POST:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce gravida eros ut leo commodo luctus. Nulla neque dui, laoreet quis felis in, porta tincidunt felis. Phasellus in lacus et sem condimentum ornare. Praesent vitae nisi tempus, gravida tortor eu, convallis dui. Cras lacinia posuere scelerisque. Vestibulum …Run Code Online (Sandbox Code Playgroud) 我有我的 django 网站,我想把它做成分布式,我知道系统设计和分布式系统的所有概念,但仍然不知道如何使用多个服务器为它提供服务。我正在尝试使我的系统分布式,以便我可以从两台机器上为我的网站提供服务(这就是分布式系统的工作方式)。我已经在 Django 中编写了我的网站。我想知道让我的同一个网站在两台机器上提供服务的步骤。这就是两个系统将如何相互了解,它们将如何连接以及每当请求进来时,将选择其中一个服务器来处理请求。我应该使用什么软件或工具来加入我的服务器,在这种情况下哪个软件将接受请求,以便它可以决定将请求发送到哪台机器以及在这种情况下应该如何配置数据库?
PS:我唯一知道的是如何使用一台服务器为我的 django 网站提供服务(从 Linode、DigitalOcean 获取机器实例)。我想为我的网站实现系统设计分布式系统概念,以便我可以通过亲自实施它来学习系统设计的所有概念
django distributed-computing distributed-system system-design server
根据 ASP.Net Core docs,会话状态的行为已经改变,因为它现在是非锁定的:
会话状态是非锁定的。如果两个请求同时尝试修改会话的内容,最后一个请求会覆盖第一个请求。Session 是作为一个连贯的 session 来实现的,这意味着所有的内容都存储在一起。当两个请求试图修改不同的会话值时,最后一个请求可能会覆盖第一个请求所做的会话更改。
我的理解是,这与 .Net Framework 中会话的行为不同,其中用户的会话根据请求被锁定,因此无论何时读取/写入它,您都不会覆盖另一个请求的数据或读取过时的数据,对于该用户。
我的问题:
有没有办法在 .Net Core 中重新启用用户会话的每个请求锁定?
如果没有,是否有可靠的方法来使用会话来防止给定用户重复提交数据?举一个具体的例子,我们有一个支付流程,该流程涉及用户从外部托管的 ThreeDSecure (3DS) iFrame(支付卡安全流程)返回。我们注意到有时(以某种方式)用户在 iFrame 中多次提交表单,我们无法控制。因此,这会触发对我们应用程序的多个回调。在我们之前的 .Net Framework 应用程序中,我们使用会话来指示付款是否正在进行中。如果在会话中设置了此标志并且您再次点击 3DS 回调,应用程序将阻止您继续。然而,现在似乎因为会话没有被锁定,当这些几乎同时发生的重复回调发生时,线程 'A' 设置 '
既然会话的工作方式发生了变化,那么处理访问同一会话的同时请求有哪些好方法?