我读过关于命名空间属性的文章。我尝试使用此功能:
#src/Controller/CartController.php
public function addProduct(int $cart_id, int $product_id, Request $request, SessionManager $sessionManager)
{
$session = new Session(new NativeSessionStorage(), new NamespacedAttributeBag());
$session->set("cart_$cart_id/product_$product_id", $request->get('selected_product_qty'));
dump($session);
die();
}
它工作得很好。
作为一项改进,我希望覆盖会话服务,因此它将在任何地方使用namespacedattributebag
,并使用依赖注入,而不是将会话服务耦合到addProduct函数中。
为此,我编辑了我的services.yaml
#config/services.yaml
session:
public: true
class: Symfony\Component\HttpFoundation\Session\Session
arguments: ['@session.storage', '@session.namespacedattributebag']
session.namespacedattributebag:
class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag
然后我更新CartController:
public function addProduct(int $cart_id, int $product_id, Request $request, Session $session)
{
$session->set("cart_$cart_id/product_$product_id", $request->get('selected_product_qty'));
dump($session);
die();
}
现在我得到了以下错误消息:
检测到服务“会话”的循环引用,路径:“会话”-
这个错误应该在这个问题上得到解决:#36261这里已经讨论过了。
但对我来说,问题仍然存在。。。(我正在使用Symfony 5.1)
我不能提供更多的解释(不幸的是),但是如果出现这个问题,你必须明确地定义会话
构造函数的第三个(和可选参数):
#config/services.yaml
session:
public: true
class: Symfony\Component\HttpFoundation\Session\Session
arguments: ['@session.storage', '@session.namespacedattributebag', '@session.flash_bag']
session.namespacedattributebag:
class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag
我认为这是因为以下代码:
#src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/SessionPass.php
foreach ($container->getDefinition('session')->getArguments() as $v) {
if (!$v instanceof Reference || !isset($bags[$bag = (string) $v]) || !\is_array($factory = $bags[$bag]->getFactory())) {
continue;
}
if ([0, 1] !== array_keys($factory) || !$factory[0] instanceof Reference || 'session' !== (string) $factory[0]) {
continue;
}
if ('get'.ucfirst(substr($bag, 8, -4)).'Bag' !== $factory[1]) {
continue;
}
$bags[$bag]->setFactory(null);
}
如果您调试它,您将看到:
dump($bags);
foreach($container->getDefinition('session')->getArguments() as $v){...}
dump($bags);
让你的配置像这样:
#config/services.yaml
...
arguments: ['@session.storage', '@session.namespacedattributebag', '@session.flash_bag']
...
您将注意到调试显示:
"session.flash_bag" => Symfony\Component\DependencyInjection\Definition {#2253 ▼
-class: "Symfony\Component\HttpFoundation\Session\Flash\FlashBag"
-file: null
-factory: array:2 [▶]
对于输入服务定义
的flash_bag
然后在输出(第二个转储()
):
"session.flash_bag" => Symfony\Component\DependencyInjection\Definition {#2253 ▼
-class: "Symfony\Component\HttpFoundation\Session\Flash\FlashBag"
-file: null
-factory: null
工厂
参数为空。
所以我想在这种情况下,没有创建flash_bag
对象,因此,没有循环引用
...
我无法再解释了。
另外,Symfony公司的一位员工说:@warslett于3月28日发表了评论
@ekosogin实际上不需要@session.flash\u bag参数。您应该能够做到这一点:
session:
class: Symfony\Component\HttpFoundation\Session\Session
arguments:
- '@session.storage'
- '@Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag'
Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag:
~```
但事实上,我认为这是错误的,因为如果你不按照他说的那样设置@session.flash\u bag参数,它将不起作用。
希望会有帮助。
我需要一起处理相同的消息集,为此,我尝试了Azure服务总线会话启用功能。为了测试这一点,我创建了一个非常简单的应用程序,一个消息在队列中成功提交,然而,当试图在“ReceiveSessionMessage”函数中接收消息时,消息会话不会返回,程序会在这一行之后退出。 我无法找出确切的根本原因,任何帮助都将不胜感激。谢谢 等待会话客户端。AcceptMessageSessionAsync();]
Django 提供对匿名会话的完全支持。其会话框架让你根据各个站点的访问者存储和访问任意数据。它在服务器端存储数据并抽象Cookie 的发送和接收。Cookie 包含会话的ID —— 不是数据本身(除非你使用基于Cookie 的后端)。 启用会话 会话是通过一个中间件实现的。 为了启用会话功能,需要这样做: 编辑MIDDLEWARE_CLASSES 设置并确保它包含'django.contrib.
会话(Cookie)查询与修改操作类 进程: 主进程 1 const {session} = require('electron') 2 //查询所有Cookie。 3 session.defaultSession.cookies.get({}, (error, cookies) => { 4 console.log(error, cookies) 5 }) 6 //查询与特定网址相关联的所有C
分布式的 servlet 容器必须支持 Java EE 实现机制所必需的其他 Java EE 对象从一个 JVM 迁移到另一个。
超文本传输协议(HTTP)被设计为一种无状态协议。为构建有效的 Web 应用,使来自一个特定的客户端的请求彼此相关联是必要的。随时间的推移,演变了许多会话跟踪机制,这些机制直接使用对程序员而言是困难或麻烦的。 该规范定义了一个简单的 HttpSession 接口,允许 servlet 容器使用几种方法来跟踪用户会话,而不会使应用开发人员陷入到这些方法的细节中。
会话功能的开启,首先要配置hi-nginx。如下所示: userid on; userid_name SESSIONID; userid_domain localhost; userid_path /; userid_expires 5m; hi_need_cookies on; hi_need_session on; 特别要注意的是,us