Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c#将新记录插入chrome cookies文件_C#_Sql_Sqlite_Google Chrome_Cookies - Fatal编程技术网

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

如何使用c#将新记录插入chrome cookies文件,c#,sql,sqlite,google-chrome,cookies,C#,Sql,Sqlite,Google Chrome,Cookies,我找到了chrome cookie文件的位置,我使用sqliteBrowser打开它并找到cookie表的结构 我还成功地从这个文件中读取了cookies,虽然cookies值是加密的,但我仍然找到了解密它的方法 我还注意到cookies表的creation_utc字段使用1601.01.01以来的时间计数 我想说的是,我已经做了一些工作,并且已经知道chrome cookies文件的结构 但问题是,当我想使用C#的System.data.sqlite向这个文件插入一个新记录时,我的程序就是无法

我找到了chrome cookie文件的位置,我使用sqliteBrowser打开它并找到cookie表的结构

我还成功地从这个文件中读取了cookies,虽然cookies值是加密的,但我仍然找到了解密它的方法

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

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

但问题是,当我想使用C#的System.data.sqlite向这个文件插入一个新记录时,我的程序就是无法插入这个记录并进入死锁状态,我注意到这种情况是由ExecuteQuery方法没有返回引起的

同样的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;
    }

如果有人想修改chrome cookie文件,你可以参考我上面发布的代码。实际上,代码是正确的,我遇到问题的原因引自上面的评论:

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


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

听起来像是权限问题。使用try/catch,查看您得到的异常是什么,并将其发布到此处。@Xaqron事实上没有任何异常!当我在vs2012中一步一步地调试时,当我执行行:int rtV=cmd.ExecuteNonQuery()时,函数没有返回!程序只是等待there@Xaqron至于权限问题,我检查了chrome Cookie文件的权限,它允许我修改,另外,当我在windows中以管理员身份执行程序时,问题仍然存在。我试图将文件复制到另一个文件夹,但效果不太好。@Xaqron我已经解决了这个问题。出现这种情况的原因是,我与同一个sql文件的另一个连接处于活动状态,因此就像文件锁的工作原理一样,它只会锁定文件,以防您读取一些脏值。@RongDu该如何加密该值?你能发布你的getEncryptedValue(value)方法吗?Thankshow当表被锁定时,您能插入记录吗?