如何使用c#向chrome cookies文件插入新记录

Posted

技术标签:

【中文标题】如何使用c#向chrome cookies文件插入新记录【英文标题】:how to use c# to insert a new record to chrome cookies file 【发布时间】:2014-10-14 13:38:38 【问题描述】:

我找到了 chrome cookie 文件在哪里,我使用 sqliteBrowser 打开它并找到 cookies 表的结构。

而且我也成功地从这个文件中读取了cookies,虽然cookies的值是加密的,但是我还是找到了一些解密的方法。

我还注意到 cookie 表的 creation_utc 字段使用自 1601.01.01 以来的时间计数。

我只想说我已经做了一些工作并且已经知道 chrome cookies 文件的结构。

但问题是,当我想使用 C# 的 System.data.sqlite 向该文件插入新记录时,我的程序无法插入该记录并进入死锁等状态,我注意到这种情况是由通过那个executeNoQuery方法不返回!!!

相同的sql语法在我的测试sqlite文件中运行良好,所以我猜这个问题是由chrome cookies文件本身引起的。

谁能帮帮我?谢谢!

以下是我尝试设置 cookie 的代码:

        private static bool SetCookie_Chrome(string strHost, string strField, string value,DateTime expiresDate)
    
        bool fRtn = false;
        string strPath, strDb;


        strPath = GetChromeCookiePath();
        //strPath= GetTestCookiePath();
        if (string.Empty == strPath) // Nope, perhaps another browser
            return false;

        try
        
            strDb = "Data Source=" + strPath + ";pooling=false";

            SQLiteConnection conn = new SQLiteConnection(strDb);

            SQLiteCommand cmd = conn.CreateCommand();

            Byte[] encryptedValue=getEncryptedValue(value);

            cmd.CommandText = "INSERT INTO `cookies`(`creation_utc`,`host_key`,`name`,`value`,`path`,`expires_utc`,`secure`,`httponly`,`last_access_utc`,`has_expires`,`persistent`,`priority`,`encrypted_value`) "+
                "VALUES ("+TimeUtil.get_creation_utc()+",'"+strHost+"','"+strField+"','','/',"+
                TimeUtil.get_specific_utc(expiresDate.Year,expiresDate.Month,expiresDate.Day,expiresDate.Hour,expiresDate.Minute,expiresDate.Second)+
                ",0,0," + TimeUtil.get_creation_utc() + ",1,1,1,@evalue);";
            cmd.Parameters.Add("@evalue", System.Data.DbType.Binary).Value = encryptedValue;
            conn.Open();
            int rtV=cmd.ExecuteNonQuery();
            conn.Close();
            fRtn = true;
        


        catch (Exception e)
        
            fRtn = false;
        
        return fRtn;
    

【问题讨论】:

听起来像是权限问题。使用 try/catch 看看你得到的究竟是什么异常并将其发布在这里。 @Xaqron 事实是没有任何异常!当我在vs2012中逐步调试时,当我执行以下行时:int rtV=cmd.ExecuteNonQuery(),函数只是没有返回!程序就在那里等待 @Xaqron 至于权限问题,我检查了chrome cookies文件的权限,它允许我修改,此外,当我在windows中以管理员身份执行程序时,问题仍然存在。我尝试将文件复制到另一个文件夹,但它也不起作用。 @Xaqron 我已经解决了这个问题。发生这种情况的原因是因为我有另一个连接到同一个 sql 文件处于活动状态,所以就像文件锁的工作原理一样,它只是锁定文件以防你读取一些脏值。 @RongDu 值应该如何加密?你能发布你的 getEncryptedValue(value) 方法吗?谢谢 【参考方案1】:

如果有人想修改chrome cookie文件,可以参考我上面贴的代码。其实代码是对的,我遇到问题的原因引用了上面的评论:

发生这种情况的原因是因为我有另一个连接到同一个 sql 文件处于活动状态,所以就像文件锁的工作原理一样,它只是锁定文件以防你读取一些脏值。

希望这个问题可以帮助其他人。

【讨论】:

表被锁定时如何插入记录?

以上是关于如何使用c#向chrome cookies文件插入新记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Selenium 中使用 Chrome 查看 Flash cookie

C# 向网站post参数并存储cookie

c#如何向Cassandra表中插入大量数据

阅读和插入Chrome Cookie Java

如何使用C#中的Selenium Webdriver使用Chrome浏览器的Cookie?

[转]如何清空Chrome缓存和Cookie