如何使用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