【问题标题】:Play Framework not setting cookie on initial page loadPlay Framework 未在初始页面加载时设置 cookie
【发布时间】:2015-06-15 16:43:58
【问题描述】:

使用播放框架,名为 TEST 的 cookie 不会在初始页面加载时设置。相反,我看到仅用于名为 PLAY_SESSION 的 cookie 的 set-cookie 标头。当我重新加载同一个页面时,这个名为 TEST 的 cookie 确实被设置了。如果未找到初始 Play 会话,是否在设置自身之前不会设置任何 cookie?

@AddCSRFToken
    public Promise<Result> post(String version) {           
        final LaunchRequest launchRequest = new LaunchRequest(request().body().asFormUrlEncoded(), false);

        Promise<ConsumerInstance> promiseOfConsumerInstance = null;
        try {
            promiseOfConsumerInstance = consumerInstanceDAO.getByConsumerKey(new ConsumerKey(launchRequest.getOauth_consumer_key()));
        } catch (DataAccessException e) {
            Logger.warn(e.getMessage());
        }

        if (promiseOfConsumerInstance != null) {
            Map<String, String> paramMap = launchRequest.toSortedMap();

            try {
                response().setCookie(
                        "TEST, CookieUtils.serializeParameters(paramMap), null, "/lti/debug");
            } catch (Exception e) {
                Logger.warn(e.getMessage(), e);
            }

            return promiseOfConsumerInstance.map(new ConsumerInstanceFunction(launchRequest)).recover(new RecoverFunction(launchRequest));
        }
        else {
            return null;
        }
    }

【问题讨论】:

  • 您是否调试过您的操作?你确定if (promiseOfConsumerInstance != null) 在第一次通话中是真的吗?只是猜测。
  • 此页面中有一个 POST 尝试读取该 TEST cookie。在第一次会话加载时它为 NULL,否则我可以抓住它。

标签: java cookies playframework playframework-2.0 session-cookies


【解决方案1】:

删除 @AddCSRFToken 逻辑解决了这个问题。我只能认为在这种方法中无法以某种方式修改响应,导致我无法对响应做任何事情。我什至不能设置一个小标题。此页面已受到保护,因此删除它不是问题,但似乎仍然存在与 Play 配合使用的问题,这只是一种解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2020-07-07
    • 2014-10-01
    相关资源
    最近更新 更多