From my experience, the general idea seems to be:
1) there must be a response event in which the persistence value is extracted from the response to create the persistence record;
and
2) there must be a request event in which the persistence value submitted in each request is compared to the persistence table
3) a rule containing that logic must be applied within a persistence profile, rather than applied directly to the virutal as a resource.
The error you're getting /may/ be caused by applying the rule directly to the virtual. Try applying the rule to a persistence profile instead, then apply the persistence profile to the virtual.
The persistence profile will manage the timeout of the record, so from what I understand you need to re-add the persistence record on each response to prevent the record from timing out on an active session.
Here's an example of the rule structure and the placement of the 2 "persist" commands:
Click here
The same persistence record may be shared by multiple clients submitting a persistence token with the same value. Persistence record looks something like "persist_value pool_member", so any request coming in with that persistence value will use that node.
HTH
/deb