我已经找到了Chrome的cookie文件,并使用SQLiteBrowser打开它并查找了cookies表的结构。
虽然cookies值是加密的,但我仍然找到了一些方法来解密它,并成功地从该文件中读取了cookies。
我还注意到,cookies表的creation_utc字段使用自1601年1月1日以来的时间计数。
我想说的是,我已经做了一些工作,已经知道了Chrome cookie文件的结构。
但问题是,当我想使用C#的System.data.sqlite向该文件插入新记录时,我的程序无法插入此记录,并进入了一些类似死锁的状态。我注意到这种情况是由executeNoQuery方法没有返回造成的!!!
相同的SQL语法在我的测试SQLite文件中运行良好,所以我猜测问题是由Chrome cookie文件本身引起的。
有人能帮帮我吗?谢谢!
以下是我尝试设置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;
}