2

そのため、Symfony2 のコントローラーで Cookie を設定し、その Cookie が設定されている場合はそれに応じて jquery スクリプトを動作させたいと考えています。当たり前のようですが、うまくいかないので質問させていただきます。

Cookie を設定する Symfony コードは次のとおりです。

// in controller
    $url = $this->container->get('router')->generate('_fs_feed_show');
    $response = new RedirectResponse($url);
    $response->headers->setCookie(new Cookie('showhelp', 'true', time() + (3600 * 48)));
    return $response;

ここに何かをするための私のjqueryスニペットがあります(私はクッキープラグインを使用しています)

if ($.cookie('showhelp') != null) {
    alert('cookie set!');
}

私も試しました:

if ($.cookie('showhelp', {path: '/'}) != null) {
    alert('cookie set!');
}

私はクロムを使用しており、「chromekie」拡張機能を使用すると、Cookie が設定されていることがわかります。JavaScript デバッガーをステップ実行すると、if ステートメントが false と評価されます。

誰か助けてくれませんか?

4

2 に答える 2

6

setCookie メソッドのドキュメントを見るhttponlyと、Cookie 変数が JavaScript にアクセスできるかどうかを決定するという名前の引数があります。Symfony2 では、デフォルトで true です。false に設定する必要があります。

    $response->headers->setCookie(new Cookie('showhelp', 'true', time() + (3600 * 48), '/', null, false, false));
于 2012-04-25T11:00:27.877 に答える
1

setcookie関数の最後のパラメーターを確認してください。httponlyはデフォルトでfalseに設定されています。

マニュアルから:

TRUEの場合、CookieはHTTPプロトコルを介してのみアクセス可能になります。これは、JavaScriptなどのスクリプト言語からCookieにアクセスできないことを意味します。この設定は、XSS攻撃による個人情報の盗難を効果的に減らすのに役立つことが示唆されていますが(すべてのブラウザーでサポートされているわけではありませんが)、その主張はしばしば論争されます。PHP5.2.0で追加されました。正しいか間違っているか

Symfony2のソースコード(v2.0.12)では

//Symfony\Component\HttpFoundation\Cookie
public function __construct(
    $name, 
    $value = null, 
    $expire = 0, 
    $path = '/', 
    $domain = null, 
    $secure = false, 
    $httpOnly = true
)
{
 //...
}

$httpOnlyパラメーターはデフォルトでtrueです。そのため、JavaScriptを使用してCookieにアクセスすることはできません。

これを修正するには、コントローラーを次のように変更する必要があります。

// in controller
$url = $this->container->get('router')->generate('_fs_feed_show');
$response = new RedirectResponse($url);
$response->headers->setCookie(
    new Cookie('showhelp', 'true', time() + (3600 * 48),'/',null,false,false)
);
return $response;
于 2012-07-15T11:22:31.150 に答える