相关疑难解决方法(0)

在JavaScript中按名称读取cookie的最短函数是什么?

在JavaScript中读取cookie的最短,准确和跨浏览器兼容的方法是什么?

通常,在构建独立脚本(我不能拥有任何外部依赖项)时,我发现自己添加了一个用于读取cookie的函数,并且通常会回退到QuirksMode.orgreadCookie()方法(280字节,216缩小).

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

它完成了这项工作,但它的丑陋,每次都增加了相当多的膨胀.

jQuery.cookie使用这样的方法(修改,165字节,125缩小):

function read_cookie(key)
{
    var result;
    return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? (result[1]) : null;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这不是"Code Golf"竞赛:我有理由减少readCookie功能的大小,并确保我的解决方案有效.

javascript cookies

180
推荐指数
9
解决办法
18万
查看次数

Cookies不能在Opera中正常发送

首先,我不确定这是否是Opera 12.01中的问题,但问题只出现在Opera中.我在Android和iPhone上测试过FF14,Chrome 21,Safari 5(Windows)以及Safari Mac和Webkit浏览器.

我的应用程序运行trigger.io的锻造平台,使用代理从Web应用程序的服务请求路由.代理只是简单地转发请求和cookie,这在大多数浏览器中按预期工作.

在检查了dragonfly中的请求后,我注意到服务器在响应中发送了正确的头文件,但Opera似乎忽略了设置值.我想知道这是否是由于cookie的一些配置错误的路径值.我在Firefox和Opera中添加了2个请求的屏幕截图.

正如您在屏幕中看到的那样,FF会看到cookie标题并对其进行适当设置,但Opera不会.

Firefox请求

Firefox请求

Opera请求1屏幕

歌剧要求1

Opera请求2屏幕

歌剧要求2

我没有包含执行请求转发的代理中的代码,因此如果您需要,请告诉我以获得一些见解.在服务端,我正在运行PHP和Codeigniter.如果我需要在我的环境中添加更多信息,请告诉我,谢谢.

更新:即使在我的生产环境中不使用自定义TLD,也会出现此问题.其他使用cookie的网站工作正常,并启用了cookie.

php cookies opera trigger.io

19
推荐指数
2
解决办法
2282
查看次数

Cookie值是否应为URL编码?

设置cookie时,PHP 会对cookie值进行url编码(至少在不使用时setrawcookie),并在将cookie值提供给应用程序之前对其进行url解码$_COOKIE.

这是一个公认的标准吗?如果我设置了原始cookie值a%3Db,我会回复a=b大多数Web编程语言(通过各自的cookie读取机制)吗?

cookies interop http

10
推荐指数
2
解决办法
6081
查看次数

ColdFusion 11 - 500非ASCII Cookie字符的内部服务器错误

为了响应任何包含非ASCII字符的cookie的请求,ColdFusion 11似乎崩溃了.IIS 8.5返回HTTP 500内部服务器错误(空白页).

重现步骤:

  1. 在Javascript控制台中运行以下命令并尝试加载任何CFML页面: document.cookie="a=ñ";

  2. (可选)请求任何.html或.txt文件并接收正常响应.

  3. 请求任何ColdFusion页面并收到空白页,HTTP 500内部服务器错误.

  4. 唯一的解决方法是清除浏览器cookie.

环境:

  • Windows Server 2012 R2标准版
  • IIS 8.5
  • 冷融合11(标准)
  • 所有操作系统和软件都运行最新的修补版本.

我已经尝试添加-Dfile.encoding=UTF-8Java参数.

我没有在ColdFusion上找到其他人遇到这个问题.在Tomcat上运行Java代码存在类似的问题.但是,由于ColdFusion 11与Tomcat捆绑在一起,我甚至不知道Tomcat的运行版本以及如何升级它.(看起来ColdFusion 10运行Tomcat 7)Adobe似乎没有关于ColdFusion 11的Tomcat层的文档(特别是它与ColdFusion的关系).我已尝试将<CookieProcessor />配置应用于context.xml,如其他帖子所示.我已发布到Adobe bug基础并且未收到任何响应.

欢迎任何想法.不幸的是,我们在cookie中有很多用户使用"Español",我们无法执行任何ColdFusion代码来清除或更改它.我们在ColdFusion 9中没有遇到这个问题,并且在升级到ColdFusion 11之后在QA检查中错过了这个问题.

coldfusion-error.log完全例外:

Sep 03, 2015 11:43:58 PM org.apache.coyote.ajp.AjpProcessor process
SEVERE: Error processing request
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
    at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:193)
    at org.apache.tomcat.util.http.Cookies.getTokenEndPosition(Cookies.java:502)
    at org.apache.tomcat.util.http.Cookies.processCookieHeader(Cookies.java:349)
    at org.apache.tomcat.util.http.Cookies.processCookies(Cookies.java:168)
    at org.apache.tomcat.util.http.Cookies.getCookieCount(Cookies.java:106)
    at org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId(CoyoteAdapter.java:986)
    at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:743)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:417)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:199)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at …
Run Code Online (Sandbox Code Playgroud)

cookies coldfusion tomcat jwplayer coldfusion-11

9
推荐指数
1
解决办法
799
查看次数

在c#中编码cookie值的安全方法

使用C#在cookie中存储值时,对值进行编码(或转义)的最佳方法是什么,以便可以可靠地检索和解码/转义?

我不是在谈论加密.

c# asp.net cookies

8
推荐指数
1
解决办法
8609
查看次数

会话不会持久存在于Lumen PHP框架中

我正在使用Lumen(通过Laravel)微框架进行项目,我在会话方面遇到了一些麻烦.我现在只是测试实现,但我遇到的问题是,当我设置会话变量然后刷新页面时,不再设置变量.

在我的.env文件中,我有:

SESSION_DRIVER=cookie
Run Code Online (Sandbox Code Playgroud)

而且我知道这是被拾取的,因为当我将其更改为memcached时会抛出错误(因为我没有设置memcached).

我也启用了中间件:

$app->middleware([
    'Illuminate\Session\Middleware\StartSession',
    'Illuminate\View\Middleware\ShareErrorsFromSession',
]);
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中我有:

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class SessionController extends Controller
{
    public function index(Request $request)
    {
        $request->session()->put('email', 'test@test.com');
        $request->session()->save(); // Not sure if this is required

        var_dump($request->session()->get('email'));
        exit;

        return view('session.index', ['test' => $value]);
    }
}
Run Code Online (Sandbox Code Playgroud)

加载页面时设置该值:

string(13) "test@test.com"
Run Code Online (Sandbox Code Playgroud)

但是当我注释掉设置变量的行,然后我刷新页面时,值为NULL:

// $request->session()->put('email', 'test@test.com');
// $request->session()->save();

var_dump($request->session()->get('email'));
exit;
Run Code Online (Sandbox Code Playgroud)

在浏览器中设置了一个cookie,但它似乎不是会话变量:

laravel_session 2ecef0103418ca82d068ec6a6c6fbec388af9b9e    localhost   /   2015-06-22T14:59:29.856Z    55  ?
Run Code Online (Sandbox Code Playgroud)

编辑:如果我将SESSION_DRIVER设置为cookie,则实际设置了cookie - 无论我是否实际设置了会话变量.

我不确定我在哪里出错,而且我发现文档并不全面.

谢谢

php session laravel laravel-4 lumen

7
推荐指数
1
解决办法
4635
查看次数

Safari和Asp.net中的cookie存在奇怪的问题

我在Asp.net的登录页面上有一个奇怪的问题,这个问题只发生在Safari上.

验证用户后,我从数据库中获取用户的名称(数据库中的字段为UTF8)并将其保存在cookie中.问题是,当用户的名字带有特殊字符时,我会被重定向到我来自的页面而不登录.例如"Moller"工作正常,用户登录但不是"Møller".

同样,这只发生在Safari上,当我在名字中有特殊字符时.无效的行是:Response.Cookies ["userInfo"] ["name"] = getNameFromUserid(userid);

这是我的代码:

string userid = validUserWithEmail(TextBoxEmail.Text, TextBoxPassword.Text);
if (userid != null) {
    //VALID USER
    Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(30);
    Response.Cookies["userInfo"]["name"] = getNameFromUserid(userid);

    FormsAuthentication.RedirectFromLoginPage(userid, CheckBoxPersistCookie.Checked);
} 
else
{
    //NOT A VALID USER SHOW A MESSAGE FOR THE USER OR SOMETHING
}
Run Code Online (Sandbox Code Playgroud)

asp.net cookies safari redirect forms-authentication

6
推荐指数
1
解决办法
8806
查看次数

Jquery停止HTML编码cookie

我正在使用这段简短的代码:

var d = itemID + "," + quantity;
var CookieData = $.cookie("storebasket");

if(CookieData == null || CookieData == "") {
    $.cookie("storebasket", d, { path: '/', expires: 60 });
} else {
    $.cookie("storebasket", CookieData + "|" + d, { path: '/', expires: 60 });
}
Run Code Online (Sandbox Code Playgroud)

但是,值ALWAYS将变为HTML编码.例如:

5%2C1
Run Code Online (Sandbox Code Playgroud)

使用此工具解码:

5,1
Run Code Online (Sandbox Code Playgroud)

我尝试过unescape但没有运气:

$.cookie("storebasket", unescape(d), { path: '/', expires: 60 });
Run Code Online (Sandbox Code Playgroud)

还有什么想法吗?

cookies jquery html-encode escaping

6
推荐指数
2
解决办法
4789
查看次数

无法更新asp.net mvc中的cookie

我可以写和读cookie但我不能改变现有cookie的值,它总是有第一个设定值.我发现几乎没有办法可以实现,但没有人工作.这是我的代码:

private void AddPost(string key)
    {
        var context = System.Web.HttpContext.Current;
        var request = context.Request;
        var response = context.Response;

        var cookie = request.Cookies[Constants.PostsViewing];

        if (cookie == null || string.IsNullOrEmpty(cookie.Value))
        {
            response.Cookies.Add(new HttpCookie(Constants.PostsViewing, key)
            {
                Expires = DateTime.Now.AddDays(365)
            });
        }
        else
        {
            if (cookie.Value.Split(';').Contains(key))
            {
                return;
            }

            var v = cookie.Value + ";" + key;

            cookie.Value = v;
            cookie.Expires = DateTime.Now.AddDays(365);
            response.Cookies.Add(cookie);

            // this way also doesn't work
            //cookie.Value = v;
            //response.AppendCookie(cookie);

            // and this
            //response.Cookies[Constants.PostsViewing].Value = v;
            //response.Cookies[Constants.PostsViewing].Expires = DateTime.Now.AddDays(365);
        } …
Run Code Online (Sandbox Code Playgroud)

c# cookies asp.net-mvc

6
推荐指数
1
解决办法
8824
查看次数

如何在cookie中安全地存储Unicode字符?

我正在使用cookie在搜索页面中显示一些数据,但是当使用Unicode字符时,我的cookie会使值变得混乱.例如,当我存储时Inglês,我在Inglês读回来时会收到.

这就是我保存cookie的方式:

public void SalvaValue(string sessionKey, string sessionValue)
{
    Response.Cookies.Add(new HttpCookie(sessionKey));

    var httpCookie = Response.Cookies[sessionKey];

    if (httpCookie != null) httpCookie.Value = sessionValue;
    if (httpCookie != null) httpCookie.Expires = DateTime.Now.AddDays(14);
}
Run Code Online (Sandbox Code Playgroud)

这是我检索它的方式:

if (Request.Cookies["BuscaTipo"] != null)
{
    tipoBusca = Request.Cookies["BuscaTipo"].Value.ToString();

     var cookie = new HttpCookie("BuscaTipo") { Expires = DateTime.Now.AddDays(-1) };
     Response.Cookies.Add(cookie);
}
Run Code Online (Sandbox Code Playgroud)

当我调试站点时,它在设置时在代码中显示正确的值,但在我使用jQuery执行请求后,该值会出现错误的字符.

如何在cookie中安全地存储Unicode字符?

c# cookies asp.net-mvc jquery

6
推荐指数
1
解决办法
6588
查看次数