Session sfGuardPlugin会话:如何将其与wget一起重用——或将SID映射到sfGuardUser

Session sfGuardPlugin会话:如何将其与wget一起重用——或将SID映射到sfGuardUser,session,authentication,cookies,symfony1,wget,Session,Authentication,Cookies,Symfony1,Wget,最近,我被要求在我的项目中的一个Symfony模块中添加一个xmlapi。我做到了,而且效果很好。对于身份验证,我们使用sfGuardPlugin。Symfony版本是1.3.11。使用推进,而不是教条 最近向我提出的请求如下: 我们将在网站中嵌入一个Flash游戏 Flash将执行对XML API的请求 编写Flash应用程序的人说它不会与浏览器共享cookies 我们希望Flash能够重用当前登录用户的会话(如果没有用户登录,我们甚至不允许显示) 我确实尝试过这个可能的解决方案:(摘自其他S

最近,我被要求在我的项目中的一个Symfony模块中添加一个xmlapi。我做到了,而且效果很好。对于身份验证,我们使用
sfGuardPlugin
。Symfony版本是1.3.11。使用推进,而不是教条

最近向我提出的请求如下:

  • 我们将在网站中嵌入一个Flash游戏
  • Flash将执行对XML API的请求
  • 编写Flash应用程序的人说它不会与浏览器共享cookies
  • 我们希望Flash能够重用当前登录用户的会话(如果没有用户登录,我们甚至不允许显示)
  • 我确实尝试过这个可能的解决方案:(摘自其他SO文章和各种Google搜索结果)

  • 我被告知Symfony会话驻留在
    Symfony
    cookie中
  • 我被告知,如果我在另一个客户机(在我的情况下,
    wget
    )中复制此值,并执行
    session\u id(“被盗的session\u id”)
    ,我将能够复制会话,让相同的用户登录,等等
  • 结果证明这是错误的。假设我的cookie symfony具有“blabla”值。我这样做了:
    wget--post data='session_id=blablabla'X.X.X:NN/api/bla.xml-O-
    。我的服务器PHP代码解析此POST参数并将其提供给
    session\u id
    函数。然后在日志中报告
    会话id('blabla')
    正在返回
    1
    。但是,调用
    $this->getUser()->getGuardUser()
    将返回
    null
  • 我需要一种方法将已传递的
    会话\u id
    映射到有效的
    sfGuardUser
    或找到重用已存在会话的替代方法

    假设我可以完全访问cookies。我想知道为了实现这一点,应该复制其中的哪一个(或全部?)

    顺便说一句,我在Chrome开发工具中看到,
    symfony
    cookie属于会话类型。因此,我的方法为什么不起作用也就不足为奇了,但在使用
    sfGuardPlugin
    时,我不知道如何在Symfony中实现这一点

    我确实意识到这不是最明智的问题之一,但同样,我只是需要帮助

    谢谢你抽出时间

    (迪米特尔p.)

    哎呀,忘了提及我在我的域中看到的cookies:

    • 西蒙尼
    • 还记得吗
    • __乌特玛
    • __utmb
    • __utmc
    • __utmz

    不过,我猜最后四个是针对谷歌分析的。

    我不想这样做,但我找不到其他替代方案:

    $wget--header='Cookie:symfony=blablabla'X.X.X:NN/api/bla.xml-O-

    我希望我的XML API是REST,但很明显,Symfony不允许使用Cookie以外的其他方式进行身份验证请求(并且使会话ID始终包含在URL中根本不是一个选项)


    尽管如此,如果有人带着一个完全休息的备选方案出现,我将投票给他/她的答案。

    您将需要某种方法来指定哪个用户正在执行(wget)请求。默认情况下,PHP会话使用会话ID

    实现这一点的常用方法是基于令牌的身份验证。实现这一点最常用的方法是OAuth,它有许多默认库(对于Symfony和API使用者都是如此)


    如果您是唯一使用此API的用户,那么您还可以为每个用户每个会话创建一个自定义令牌(随机sha1字符串)(您可以将其存储在数据库中的某个位置)。现在您将创建类似“wget X.X.X.X:NN/api/bla.xml?token=asdfhdsfhf”的内容,谢谢您的建议。遗憾的是,我正在使用遗留软件。不能做太多的改变。好吧,我等了足够长的时间,等待有人回答和我一样的问题,并得到他的15个代表,但由于没有人出现,我将接受我的答案。;)