You can use Boolean modifiers if you want to have full
control of the intersecting material.
These objects must not be touched, as they are the "basis" for the modifiers. So the first step consist in copy the left (or the right) object) and hide all the other. We'll call this "Left copy intersect right"
Add to this object a Boolan modifier, set to "Intersect" an than point to the right object.
Here we have the first part of three... we can assign a purple material to this object.
Copy again the left object, assign boolean modifier an this time set boolean operation to "Difference" and point to right object.
Finish with the last part. Copy Right object, add boolean modifier, set to difference, to left the object.
Assign material to the three object as you wish
You can use Volume absorbtion shader if you want that the two materials blend themselves for real
Create a material based for example on a glass shader for the surface and a volume absorbtion shader based on wanted color for the volume output.
Notice that these are the "origninal" right and left objects, so you don't need other operations, but you have some limitation on the material... they must have a transparent component.
Also notice (in the 3D view on the top) that you have to move the geometry a bit, to avoid overlapping faces that may cause artifacts.
Here's another possible material and the blendfile: